.update()
metode di luwak membutuhkan tiga argumen untuk panggilan balik, menjadi err
, numAffected
, dan raw
tanggapan. Gunakan objek "mentah" untuk melihat apa yang terjadi:
Member.update({user_id : 1},
{$set : {name:"name1"}},
{upsert : true },
function (err, numAffected, raw) {
if (!err) {
console.log(raw)
}
});
Anda akan melihat struktur seperti ini:
{ ok: true,
n: 1,
updatedExisting: false,
upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }
Jadi selalu ada n
dan kunci 'updatedExistingkeys available, where the second is false on upserts and true otherwise.
terbalikwill contain the
nilai _id` dari setiap dokumen baru yang dibuat.
Adapun n
atau "numAffected", ini pada dasarnya selalu 1 di mana dokumen dicocokkan di bawah tanggapan kekhawatiran penulisan warisan.
Anda dapat melihat respons WriteResult baru di MongoDB 2.6 dan di atasnya menggunakan formulir Operasi Massal:
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 ) );
}
Yang pada iterasi pertama Anda mendapatkan sesuatu seperti ini:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 1,
"nMatched": 0,
"nModified": 0,
"nRemoved": 0,
"upserted": [
{
"index": 0,
"_id": "5456fff138209001a6b5e1c0"
}
]
}
Dan yang kedua dengan parameter yang sama seperti ini:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 0,
"nMatched": 1,
"nModified": 0,
"nRemoved": 0,
"upserted": []
}
Dan dokumen hanya akan ditandai sebagai "dimodifikasi" jika ada sesuatu yang benar-benar diubah.
Jadi bagaimanapun juga, .update()
operasi tidak mengembalikan dokumen yang dimodifikasi atau dokumen asli. Itu adalah .findOneAndUpdate()
metode, pembungkus luwak di sekitar .findAndModify()
dasar yang melakukan operasi atom. .update()
metode biasanya dimaksudkan untuk operasi massal dan karena itu tidak mengembalikan konten dokumen.