MongoDB में initializeUnorderedBulkOp() का उपयोग करके बल्क अपडेट करना
initializeUnorderedBulkOp() (लिगेसी शेल मेथड) एक अनऑर्डर्ड बल्क ऑपरेशन बिल्डर बनाता है जो मल्टीपल अपडेट ऑपरेशन्स को एक ही नेटवर्क राउंड-ट्रिप में बैच करने की अनुमति देता है। आधुनिक MongoDB में, बल्क राइट्स के लिए bulkWrite() का उपयोग करें।
नमूना डेटा बनाना
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"John","CustomerPurchaseAmount":500});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb06d78f205348bc626") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"Chris","CustomerPurchaseAmount":700});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb26d78f205348bc627") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"David","CustomerPurchaseAmount":50});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb36d78f205348bc628") }
> db.upDateMultipleRowsDemo.insertOne({"CustomerName":"Larry","CustomerPurchaseAmount":1900});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ceb46d78f205348bc629") }
सभी डॉक्यूमेंट्स देखना
> db.upDateMultipleRowsDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd6ceb06d78f205348bc626"), "CustomerName" : "John", "CustomerPurchaseAmount" : 500 }
{ "_id" : ObjectId("5cd6ceb26d78f205348bc627"), "CustomerName" : "Chris", "CustomerPurchaseAmount" : 700 }
{ "_id" : ObjectId("5cd6ceb36d78f205348bc628"), "CustomerName" : "David", "CustomerPurchaseAmount" : 50 }
{ "_id" : ObjectId("5cd6ceb46d78f205348bc629"), "CustomerName" : "Larry", "CustomerPurchaseAmount" : 1900 }
लिगेसी बल्क ऑप के साथ मल्टीपल अपडेट्स
> var manyUpdateValue = db.upDateMultipleRowsDemo.initializeUnorderedBulkOp();
> manyUpdateValue.find({ _id: ObjectId("5cd6ceb06d78f205348bc626") }).updateOne({ $set: { "CustomerName": "Bob" } });
> manyUpdateValue.find({ _id: ObjectId("5cd6ceb36d78f205348bc628") }).updateOne({ $set: { "CustomerPurchaseAmount": 56544444 } });
> manyUpdateValue.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 0,
"nUpserted" : 0,
"nMatched" : 2,
"nModified" : 2,
"nRemoved" : 0,
"upserted" : [ ]
})
परिणाम वेरिफाई करना
> db.upDateMultipleRowsDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd6ceb06d78f205348bc626"), "CustomerName" : "Bob", "CustomerPurchaseAmount" : 500 }
{ "_id" : ObjectId("5cd6ceb26d78f205348bc627"), "CustomerName" : "Chris", "CustomerPurchaseAmount" : 700 }
{ "_id" : ObjectId("5cd6ceb36d78f205348bc628"), "CustomerName" : "David", "CustomerPurchaseAmount" : 56544444 }
{ "_id" : ObjectId("5cd6ceb46d78f205348bc629"), "CustomerName" : "Larry", "CustomerPurchaseAmount" : 1900 }
आधुनिक दृष्टिकोण: bulkWrite() (MongoDB 3.2+)
db.upDateMultipleRowsDemo.bulkWrite([
{ updateOne: {
filter: { _id: ObjectId("5cd6ceb06d78f205348bc626") },
update: { $set: { "CustomerName": "Bob" } }
}},
{ updateOne: {
filter: { _id: ObjectId("5cd6ceb36d78f205348bc628") },
update: { $set: { "CustomerPurchaseAmount": 56544444 } }
}}
]);
लाभ
- कम नेटवर्क राउंड-ट्रिप्स - सभी ऑपरेशन्स एक बैच में भेजे जाते हैं।
- अनऑर्डर्ड निष्पादन - ऑपरेशन्स समानांतर में निष्पादित हो सकते हैं (तेज़)।
- ऑर्डर्ड विकल्प -
initializeOrderedBulkOp()याbulkWrite([...], { ordered: true })क्रमिक निष्पादन के लिए, पहली त्रुटि पर रुकता है।
मुख्य बिंदु
- नए कोड के लिए
bulkWrite()का उपयोग करें;initializeUnorderedBulkOp()लिगेसी है। - प्रति बैच 1000 ऑपरेशन्स तक (कॉन्फ़िगरेबल)।
- बड़े बैच्स के लिए, बेहतर थ्रूपुट के लिए छोटे बैच्स में विभाजित करें।