यहां गणना के दृष्टिकोण के आधार पर एक संभावित समाधान दिया गया है (मैंने इसका परीक्षण नहीं किया है और इसमें कोई त्रुटि नहीं है, लेकिन यह विचार व्यक्त करना चाहिए)।
मूल रणनीति है:कितने रिकॉर्ड को अद्यतन करने की आवश्यकता है, इसकी गणना प्राप्त करें, प्रत्येक रिकॉर्ड को एसिंक्रोनस रूप से सहेजें और सफलता पर एक कॉलबैक, जो गिनती को घटाएगा और डीबी को बंद कर देगा यदि गिनती 0 तक पहुंच जाती है (जब अंतिम अपडेट समाप्त होता है)। {safe:true}
. का उपयोग करके हम यह सुनिश्चित कर सकते हैं कि प्रत्येक अपडेट सफल हो।
mongo सर्वर प्रति कनेक्शन एक थ्रेड का उपयोग करेगा, इसलिए या तो a) बंद अप्रयुक्त कनेक्शन, या b) पूल/उनका पुन:उपयोग करना अच्छा है।
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.count(function(err,count)){
var savesPending = count;
if(count == 0){
db.close();
return;
}
var saveFinished = function(){
savesPending--;
if(savesPending == 0){
db.close();
}
}
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc, {safe:true}, saveFinished);
}
});
})
});
});