बेहतर प्रदर्शन के लिए, Bulk()
. का उपयोग करने का लाभ उठाएं थोक में संग्रह को कुशलतापूर्वक अद्यतन करने के लिए एपीआई क्योंकि आप बैचों में सर्वर को संचालन भेजेंगे (उदाहरण के लिए, 500 का बैच आकार कहें)। यह आपको बहुत बेहतर प्रदर्शन देता है क्योंकि आप सर्वर को प्रत्येक अनुरोध नहीं भेजेंगे बल्कि प्रत्येक 500 अनुरोधों में से केवल एक बार भेजेंगे, इस प्रकार आपके अपडेट अधिक कुशल और तेज़ हो जाएंगे।
निम्नलिखित इस दृष्टिकोण को प्रदर्शित करता है, पहला उदाहरण Bulk()
का उपयोग करता है एपीआई MongoDB संस्करणों>=2.6 और <3.2 में उपलब्ध है। यह किसी दिए गए सरणी से संग्रह में सभी मिलान किए गए दस्तावेज़ों को दिखाए गए फ़ील्ड में 1 बढ़ाकर अपडेट करता है। यह मानता है कि छवियों की सरणी में संरचना होती है
var images = [
{ "_id": 1, "name": "img_1.png" },
{ "_id": 2, "name": "img_2.png" }
{ "_id": 3, "name": "img_3.png" },
...
{ "_id": n, "name": "img_n.png" }
]
MongoDB संस्करण>=2.6 और <3.2 :
var bulk = db.images.initializeUnorderedBulkOp(),
counter = 0;
images.forEach(function (doc) {
bulk.find({ "_id": doc._id }).updateOne({
"$inc": { "shown": 1 }
});
counter++;
if (counter % 500 === 0) {
// Execute per 500 operations
bulk.execute();
// re-initialize every 500 update statements
bulk = db.images.initializeUnorderedBulkOp();
}
})
// Clean up remaining queue
if (counter % 500 !== 0) { bulk.execute(); }
अगला उदाहरण नए MongoDB संस्करण 3.2 पर लागू होता है, जिसने तब से Bulk()
को हटा दिया है। एपीआई और bulkWrite()
. का उपयोग करके एपीआई का एक नया सेट प्रदान किया ।
MongoDB संस्करण 3.2 और उच्चतर :
var ops = [];
images.forEach(function(doc) {
ops.push({
"updateOne": {
"filter": { "_id": doc._id },
"update": {
"$inc": { "shown": 1 }
}
}
});
if (ops.length === 500 ) {
db.images.bulkWrite(ops);
ops = [];
}
})
if (ops.length > 0)
db.images.bulkWrite(ops);