आप इसे कर सकते हैं लेकिन ऐसा करने के लिए आपको अपने कॉलिंग सम्मेलनों को बदलने की जरूरत है क्योंकि केवल "कॉलबैक" फॉर्म वास्तव में एक संग्रह ऑब्जेक्ट लौटाएगा जिसमें से .initializeUnorderedBulkOp()
विधि कहा जा सकता है। आपके विचार से यह कैसे काम करता है, इसके उपयोग में कुछ अंतर भी हैं:
var dbURI = urigoeshere;
var db = mongo.db(dbURI, {safe:true});
db.collection('collection',function(err,collection) {
var bulk = collection.initializeUnorderedBulkOp();
count = 0;
for (var i = 0; i < 200000; i++) {
bulk.insert({number: i});
count++;
if ( count % 1000 == 0 )
bulk.execute(function(err,result) {
// maybe do something with results
bulk = collection.initializeUnorderedBulkOp(); // reset after execute
});
});
// If your loop was not a round divisor of 1000
if ( count % 1000 != 0 )
bulk.execute(function(err,result) {
// maybe do something here
});
});
तो वास्तविक "थोक" विधियों को स्वयं कॉलबैक की आवश्यकता नहीं होती है और दस्तावेज़ीकरण में दिखाए गए अनुसार ठीक से काम करते हैं। अपवाद है .execute()
जो वास्तव में सर्वर को स्टेटमेंट भेजता है।
जबकि ड्राइवर आपके लिए इसे कुछ हद तक सुलझाएगा, निष्पादन को कॉल करने से पहले बहुत सारे संचालन को कतारबद्ध करना शायद एक अच्छा विचार नहीं है। यह मूल रूप से मेमोरी में बनता है, और हालांकि ड्राइवर एक बार में केवल 1000 के बैच में भेजेगा (यह एक सर्वर सीमा है और साथ ही पूरा बैच 16 एमबी से कम है), आप शायद यहां थोड़ा और नियंत्रण चाहते हैं, कम से कम स्मृति उपयोग सीमित करें।
जैसा कि दिखाया गया है, मॉड्यूलो परीक्षणों का यही बिंदु है, लेकिन यदि संचालन के निर्माण के लिए स्मृति और संभावित रूप से वास्तव में बड़ी प्रतिक्रिया वस्तु आपके लिए कोई समस्या नहीं है तो आप केवल संचालन को कतारबद्ध कर सकते हैं और कॉल कर सकते हैं .execute()
कोड> एक बार।
"प्रतिक्रिया" उसी प्रारूप में है जैसा कि BulkWriteResult के दस्तावेज़ीकरण में दिया गया है।