mongooseの既存のエントリのフィールドを変更する場合、
model = new Model([...])
model.field = 'new value';
model.save();
この
Model.update({[...]}, {$set: {field: 'new value'});
私がこの質問をする理由は、昨日私が投稿した問題に対する誰かの提案のためです:NodeJS と Mongo - 複数のユーザーが同時にリクエストを送信した場合の予期しない動作. その人は save の代わりに update を使うことを提案しましたが、それがなぜ違いを生むのかはまだ完全にはわかりません。
ありがとう!
ベストアンサー1
まず2つの概念。あなたのアプリケーションはクライアントMongodbはサーバ。
主な違いは、.save()
クライアント側のコードに既にオブジェクトが存在するか、書き戻す前にサーバーからデータを取得する必要があり、すべてを書き戻すことです。
一方で.update()
はないサーバーからクライアントにデータをロードする必要があります。すべてのやり取りは、クライアントに取得されることなくサーバー側で行われます。そのため、.update()
既存のドキュメントにコンテンツを追加する場合は、この方法が非常に効率的になります。
さらに、クエリ条件に一致する複数のドキュメントに対してアクションを実行できるようにするmulti
パラメータもあります。.update()
呼び出しとして使用すると、便利なメソッドには失われるものがいくつかあります.update()
が、特定の操作の利点は、負担しなければならない「トレードオフ」です。これに関する詳細と利用可能なオプションについては、ドキュメンテーション。
つまり、.save()
クライアント側のインターフェースであり、.update()
サーバー側です。