Hier ist eine mögliche Lösung, die auf dem Zählansatz basiert (ich habe es nicht getestet und es gibt kein Fehler-Trapping, aber es sollte die Idee vermitteln).
Die grundlegende Strategie lautet:Erfassen Sie die Anzahl der zu aktualisierenden Datensätze, speichern Sie jeden Datensatz asynchron und bei Erfolg einen Rückruf, der die Anzahl verringert und die DB schließt, wenn die Anzahl 0 erreicht (wenn die letzte Aktualisierung abgeschlossen ist). Durch die Verwendung von {safe:true}
wir können sicherstellen, dass jedes Update erfolgreich ist.
Der Mongo-Server verwendet einen Thread pro Verbindung, daher ist es gut, entweder a) unbenutzte Verbindungen zu schließen oder b) sie zusammenzulegen/wiederzuverwenden.
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);
}
});
})
});
});