MongoDB बल्क ऑपरेशन्स के साथ एकाधिक दस्तावेज़ अपडेट करना
जब कई दस्तावेज़ों को अलग-अलग मानों के साथ अपडेट करना हो, तो बल्क ऑपरेशन्स का उपयोग करना अधिक कुशल होता है क्योंकि यह नेटवर्क राउंड-ट्रिप्स को कम करता है।
सैंपल डेटा बनाना
> db.demo227.insertOne({"_id":"101","Name":"Chris"});
{ "acknowledged" : true, "insertedId" : "101" }
> db.demo227.insertOne({"_id":"102","Name":"Bob"});
{ "acknowledged" : true, "insertedId" : "102" }
बल्क अपडेट ऑपरेशन
> var bulkUpdateValue = [
{"_id": "101", "Name": "Robert"},
{"_id": "102", "Name": "Sam"}
];
> var bulkUpdate = db.demo227.initializeUnorderedBulkOp();
> var updateCounter = undefined;
> for (var i = 0; i < bulkUpdateValue.length; i++) {
updateCounter = bulkUpdateValue[i];
bulkUpdate.find( {_id: updateCounter._id} ).update( {$set: {Name: updateCounter.Name}} );
}
> bulkUpdate.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 0,
"nUpserted" : 0,
"nMatched" : 2,
"nModified" : 2,
"nRemoved" : 0,
"upserted" : [ ]
})
अपडेटेड दस्तावेज़ देखना
> db.demo227.find();
आउटपुट:
{ "_id" : "101", "Name" : "Robert" }
{ "_id" : "102", "Name" : "Sam" }
आधुनिक विकल्प: bulkWrite()
नए MongoDB वर्जन (3.2+) में bulkWrite() विधि अधिक सरल है:
> db.demo227.bulkWrite([
{ updateOne: { filter: { _id: "101" }, update: { $set: { Name: "Robert" } } } },
{ updateOne: { filter: { _id: "102" }, update: { $set: { Name: "Sam" } } } }
]);
मुख्य लाभ
- अनऑर्डर्ड बल्क ऑप्स समानांतर निष्पादन की अनुमति देते हैं
- सिंगल नेटवर्क राउंड-ट्रिप में कई ऑपरेशन्स
- बेहतर परफॉर्मेंस बड़े बैच अपडेट्स के लिए