Här är en potentiell lösning baserad på räknemetoden (jag har inte testat det och det finns ingen felfällning, men det borde förmedla tanken).
Den grundläggande strategin är:Inhämta räkningen av hur många poster som behöver uppdateras, spara varje post asynkront och en återuppringning vid framgång, vilket kommer att minska antalet och stänga DB om räkningen når 0 (när den senaste uppdateringen är klar). Genom att använda {safe:true}
vi kan säkerställa att varje uppdatering är framgångsrik.
Mongoservern kommer att använda en tråd per anslutning, så det är bra att antingen a) stänga oanvända anslutningar eller b) poola/återanvända 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);
}
});
})
});
});