बैचों में बल्क इंसर्ट ऑपरेशंस भेजें क्योंकि इससे सर्वर पर कम ट्रैफिक आता है और इस प्रकार सभी को अलग-अलग स्टेटमेंट में नहीं भेजकर कुशल वायर ट्रांजेक्शन करता है, बल्कि सर्वर प्रतिबद्धता के लिए प्रबंधनीय विखंडू में टूट जाता है। इस दृष्टिकोण के साथ कॉलबैक में प्रतिक्रिया के लिए प्रतीक्षा करने में भी कम समय लगता है।
इसके साथ एक बेहतर तरीका होगा async का उपयोग करना मॉड्यूल इसलिए इनपुट सूची को लूप करना भी एक गैर-अवरुद्ध ऑपरेशन है। बैच का आकार चुनना अलग-अलग हो सकता है, लेकिन प्रति 1000 प्रविष्टियों में बैच इंसर्ट ऑपरेशन का चयन करना 16MB BSON हार्ड लिमिट के तहत रहना सुरक्षित बना देगा, क्योंकि संपूर्ण "अनुरोध" एक BSON दस्तावेज़ के बराबर है।
निम्नलिखित async का उपयोग करके प्रदर्शित करता है मॉड्यूल के सरणी के माध्यम से पुनरावृति करने के लिए और बार-बार इटरेटर फ़ंक्शन को कॉल करें, जबकि परीक्षण सही होता है। रोके जाने पर या कोई त्रुटि होने पर कॉलबैक कॉल करता है।
var bulk = col.initializeOrderedBulkOp(),
counter = 0,
len = array.length,
buildModel = function(index){
return {
"data": array[index],
"metaData": {
"hash": hash,
"date": timestamp,
"name": name
}
}
};
async.whilst(
// Iterator condition
function() { return counter < len },
// Do this in the iterator
function (callback) {
counter++;
var model = buildModel(counter);
bulk.insert(model);
if (counter % 1000 == 0) {
bulk.execute(function(err, result) {
bulk = col.initializeOrderedBulkOp();
callback(err);
});
} else {
callback();
}
},
// When all is done
function(err) {
if (counter % 1000 != 0) {
bulk.execute(function(err, result) {
console.log("More inserts.");
});
}
console.log("All done now!");
}
);