MongoDB में अनऑर्डर्ड बल्क ऑपरेशन का उपयोग करके एकाधिक दस्तावेज़ अपसर्ट करना
MongoDB में initializeUnorderedBulkOp() के साथ बल्क ऑपरेशन का उपयोग करके एकाधिक दस्तावेज़ों पर अपसर्ट करें। नोट: यह पुराना API है; आधुनिक संस्करणों में bulkWrite() का उपयोग करें।
उदाहरण: संग्रह और दस्तावेज़ बनाना
> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee4fbbc41e36cc3cae6c") }
> db.demo425.insertOne({"Name":"David","Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee56bbc41e36cc3cae6d") }
> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee57bbc41e36cc3cae6e") }
> db.demo425.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e74ee5cbbc41e36cc3cae6f") }
सभी दस्तावेज़ देखना
> db.demo425.find();
आउटपुट:
{ "_id" : ObjectId("5e74ee4fbbc41e36cc3cae6c"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e74ee56bbc41e36cc3cae6d"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e74ee57bbc41e36cc3cae6e"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e74ee5cbbc41e36cc3cae6f"), "Name" : "Chris", "Age" : 21 }
पुराने बल्क API से अपसर्ट (Name: "Chris" वाले सभी को अपडेट)
> var b1 = db.demo425.initializeUnorderedBulkOp();
> b1.find( { Name: "Chris" } ).upsert().update(
{
$setOnInsert: { id:101 },
$set: { Name: "Robert", Age:23 }
}
);
> b1.execute();
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 3, "nModified" : 3, "nRemoved" : 0, "upserted" : [ ] })
अपडेट के बाद दस्तावेज़ देखना
> db.demo425.find();
आउटपुट:
{ "_id" : ObjectId("5e74ee4fbbc41e36cc3cae6c"), "Name" : "Robert", "Age" : 23 }
{ "_id" : ObjectId("5e74ee56bbc41e36cc3cae6d"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e74ee57bbc41e36cc3cae6e"), "Name" : "Robert", "Age" : 23 }
{ "_id" : ObjectId("5e74ee5cbbc41e36cc3cae6f"), "Name" : "Robert", "Age" : 23 }
व्याख्या:
find({Name: "Chris"})- फिल्टर कंडीशन.upsert()- अपसर्ट मोड सक्षम (नहीं मिले तो इन्सर्ट)$setOnInsert- केवल इन्सर्ट होने पर सेट होता है (मौजूदा पर नहीं)$set- हमेशा सेट होता है (मौजूदा दस्तावेज़ अपडेट करता है)- चूंकि 3 दस्तावेज़ मिले, सभी अपडेट हुए, कोई इन्सर्ट नहीं
आधुनिक bulkWrite() समतुल्य:
db.demo425.bulkWrite([
{
updateMany: {
filter: { Name: "Chris" },
update: {
$set: { Name: "Robert", Age: 23 },
$setOnInsert: { id: 101 }
},
upsert: true
}
}
], { ordered: false })
लाभ: बल्क ऑपरेशन नेटवर्क राउंड-ट्रिप कम करते हैं और एटॉमिकिटी विकल्प देते हैं।