Her er en potentiel løsning baseret på tællemetoden (jeg har ikke testet den, og der er ingen fejlfældelse, men den burde formidle ideen).
Den grundlæggende strategi er:Indhent optællingen af, hvor mange poster der skal opdateres, gem hver post asynkront og et tilbagekald ved succes, hvilket vil formindske optællingen og lukke DB'en, hvis optællingen når 0 (når den sidste opdatering afsluttes). Ved at bruge {safe:true}
vi kan sikre, at hver opdatering er vellykket.
Mongo-serveren vil bruge én tråd pr. forbindelse, så det er godt at enten a) lukke ubrugte forbindelser, eller b) samle/genbruge dem.
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);
}
});
})
});
});