Hier is een mogelijke oplossing op basis van de telbenadering (ik heb het niet getest en er is geen foutopsporing, maar het zou het idee moeten overbrengen).
De basisstrategie is:verkrijg de telling van het aantal records dat moet worden bijgewerkt, sla elke record asynchroon op en een callback bij succes, waardoor de telling wordt verlaagd en de database wordt gesloten als de telling 0 bereikt (wanneer de laatste update is voltooid). Door {safe:true}
. te gebruiken we kunnen ervoor zorgen dat elke update succesvol is.
De mongo-server gebruikt één thread per verbinding, dus het is goed om ofwel a) ongebruikte verbindingen te sluiten, of b) ze te poolen/hergebruiken.
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);
}
});
})
});
});