MongoDB में bulkWrite() का उपयोग करके एक ही ऑपरेशन में कई लिखने के ऑपरेशन (इन्सर्ट, अपडेट, अपसर्ट, डिलीट) कुशलतापूर्वक निष्पादित करें। यह नेटवर्क राउंड-ट्रिप को कम करता है और परमाणु बैच प्रसंस्करण की अनुमति देता है।
उदाहरण: अपसर्ट ऑपरेशन की सरणी तैयार करें
> const arrayList = [
{ "Value1": 100, "Value2": 200, "Name": "John" },
{ "Value1": 100, "Value2": 200, "Name": "Bob" }
];
> let op1 = [];
> arrayList.forEach(({ Value1, Value2, Name }) => {
op1.push({
"updateOne": {
"filter": { Name },
"update": { "$set": { Value1, Value2, Name } },
"upsert": true
}
});
});
bulkWrite निष्पादित करें
> db.demo397.bulkWrite(op1);
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 0,
"matchedCount" : 0,
"upsertedCount" : 2,
"insertedIds" : { },
"upsertedIds" : {
"0" : ObjectId("5e5e8c07f995e1718151981c"),
"1" : ObjectId("5e5e8c07f995e1718151981d")
}
}
परिणाम जांचें
> db.demo397.find();
आउटपुट:
{ "_id" : ObjectId("5e5e8c07f995e1718151981c"), "Name" : "John", "Value1" : 100, "Value2" : 200 }
{ "_id" : ObjectId("5e5e8c07f995e1718151981d"), "Name" : "Bob", "Value1" : 100, "Value2" : 200 }
व्याख्या
arrayListस्रोत डेटा रखता है।forEachप्रत्येक आइटम के लिएupdateOneऑपरेशन बनाता हैupsert: trueके साथ (मौजूद होने पर अपडेट करता है, अन्यथा डालता है)।bulkWrite(op1)सभी ऑपरेशन को एक बैच में भेजता है।- परिणाम
upsertedCount: 2और नए_idमान दिखाता है।
bulkWrite ऑपरेशन प्रकार
| ऑपरेशन | उद्देश्य |
|---|---|
insertOne | एकल दस्तावेज़ डालें |
updateOne | पहला मिलान अपडेट करें |
updateMany | सभी मिलान अपडेट करें |
deleteOne | पहला मिलान हटाएं |
deleteMany | सभी मिलान हटाएं |
replaceOne | पहला मिलान बदलें |
विकल्प
ordered: true(डिफ़ॉल्ट) — क्रम में निष्पादित करता है, पहली त्रुटि पर रुकता है।ordered: false— अनऑर्डर्ड, समानांतर निष्पादन, जारी रहता है त्रुटियों के बाद।bypassDocumentValidation: true— स्कीमा वैलिडेशन छोड़ें।
सर्वोत्तम अभ्यास
- बैच आकार: प्रति बैच 1000-5000 ऑपरेशन (16MB BSON लिमिट)।
- बेहतर थ्रूपुट के लिए
ordered: falseका उपयोग करें जब क्रम मायने नहीं रखता। - त्रुटियों को परिणाम में
writeErrorsके माध्यम से संभालें।