Ето едно потенциално решение, базирано на подхода за броене (не съм го тествал и няма прихващане на грешки, но трябва да предаде идеята).
Основната стратегия е:Придобиване на броя на записите, които трябва да бъдат актуализирани, запазване на всеки запис асинхронно и обратно извикване при успех, което ще намали броя и ще затвори DB, ако броят достигне 0 (когато завърши последната актуализация). С помощта на {safe:true}
можем да гарантираме, че всяка актуализация е успешна.
Сървърът mongo ще използва една нишка на връзка, така че е добре или а) да затворите неизползваните връзки, или б) да ги обедините/използвате повторно.
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);
}
});
})
});
});