.update()
mongooseのメソッドは、コールバックに対して3つの引数を取ります。err
、numAffected
、およびraw
応答。 「生の」オブジェクトを使用して、何が起こったかを確認します。
Member.update({user_id : 1},
{$set : {name:"name1"}},
{upsert : true },
function (err, numAffected, raw) {
if (!err) {
console.log(raw)
}
});
次のような構造が表示されます:
{ ok: true,
n: 1,
updatedExisting: false,
upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }
したがって、常にn
があります および'updatedExistingkeys available, where the second is false on upserts and true otherwise.
upsertedwill contain the
が含まれます 作成された新しいドキュメントの_id`値。
n
について または「numAffected」の場合、これは基本的に常に1であり、従来の書き込み懸念応答の下でドキュメントが一致しました。
一括操作フォームを使用して、MongoDB2.6以降で新しいWriteResult応答を確認できます。
var bulk = Member.collection.initializeOrderedBulkOp();
bulk.find({user_id : 1}.upsert().update({$set : {name:"name1"}});
bulk.execute(err,result) {
console.log( JSON.stringify( result, undefined, 2 ) );
}
最初の反復で次のようなものが得られます:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 1,
"nMatched": 0,
"nModified": 0,
"nRemoved": 0,
"upserted": [
{
"index": 0,
"_id": "5456fff138209001a6b5e1c0"
}
]
}
そして、次のような同じパラメータを持つ秒:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 0,
"nMatched": 1,
"nModified": 0,
"nRemoved": 0,
"upserted": []
}
また、ドキュメントは、実際に何かが変更された場合にのみ「変更済み」としてマークされます。
とにかく、.update()
操作は、変更されたドキュメントまたは元のドキュメントを返しません。それが.findOneAndUpdate()
です メソッド、基本的な.findAndModify()
のマングースラッパー アトミック操作を実行します。 .update()
メソッドは通常、一括操作を目的としているため、ドキュメントのコンテンツは返されません。