.update()
नेवला में विधि कॉलबैक के लिए तीन तर्क लेती है, 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 होता है जहां विरासत लेखन चिंता प्रतिक्रियाओं के तहत एक दस्तावेज़ का मिलान किया गया था।
आप बल्क ऑपरेशंस फॉर्म का उपयोग करके MongoDB 2.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()
विधियां आम तौर पर थोक संचालन के लिए होती हैं और इस तरह दस्तावेज़ सामग्री वापस नहीं करती हैं।