[解決済み】mongooseでmongoの配列にアイテムをプッシュする。
2022-04-01 11:45:51
質問
基本的に、私は'people'という名前のmongodbのコレクションを持っています。 そのスキーマは次のとおりです。
people: {
name: String,
friends: [{firstName: String, lastName: String}]
}
さて、データベースに接続し、空の友人配列を持つ 'people' を作成する、非常に基本的な express アプリケーションができました。
アプリケーションの二次的な場所には、友達を追加するためのフォームが設置されています。このフォームにはfirstNameとlastNameが入力され、nameフィールドも適切なpeopleオブジェクトを参照するためにPOSTされます。
私が困っているのは、新しい友人オブジェクトを作成し、それを友人配列に "push"することです。
mongo コンソールでこの操作を行う場合、update 関数に
$push
を第二引数として渡しますが、mongooseにこれをさせる適切な方法が見つかりません。
db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});
解決するには?
想定しています。
var friend = { firstName: 'Harry', lastName: 'Potter' };
選択肢は2つありますね。
モデルをインメモリで更新し、保存する(プレーンなjavascriptのarray.push)。
person.friends.push(friend);
person.save(done);
または
PersonModel.update(
{ _id: person._id },
{ $push: { friends: friend } },
done
);
私は可能な限り最初の選択肢を選ぶようにしています。なぜなら、その方がmongooseが与えてくれる利点(フック、バリデーションなど)をより多く尊重することができるからです。
しかし、同時にたくさんの書き込みを行う場合、レースコンディションに陥り、毎回モデル全体を置き換えることを阻止するために厄介なバージョンエラーが発生し、前に追加した友人が失われてしまうことになります。ですから、前者にするのは絶対に必要なときだけにしてください。
関連
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] nodeファイルの先頭にある"/usr/bin/env node "は、具体的には何をするのですか?
-
[解決済み] バルク更新を行う。
-
[解決済み] mongodb/mongoose findMany - 配列にリストされたIDを持つすべてのドキュメントを検索する。
-
[解決済み】Mongoose がサブドキュメントの配列アイテムに _id プロパティを作成しないようにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] http-server コマンドが見つかりません。
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] エラーメッセージ MongoError: bad auth URI 文字列で認証に失敗しました。
-
[解決済み] Json Web Token verify() return jwt malformed