Zde je potenciální řešení založené na přístupu počítání (netestoval jsem to a nedochází k zachycování chyb, ale mělo by to vyjádřit myšlenku).
Základní strategie je:Získat počet záznamů, které je třeba aktualizovat, uložit každý záznam asynchronně a v případě úspěchu provést zpětné volání, které sníží počet a zavře DB, pokud počet dosáhne 0 (když poslední aktualizace skončí). Pomocí {safe:true}
můžeme zajistit, že každá aktualizace bude úspěšná.
Server mongo bude používat jedno vlákno na připojení, takže je dobré buď a) zavřít nepoužívaná připojení, nebo b) je spojit/znovu použít.
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);
}
});
})
});
});