Inilah solusi potensial berdasarkan pendekatan penghitungan (saya belum mengujinya dan tidak ada perangkap kesalahan, tetapi itu harus menyampaikan ide).
Strategi dasarnya adalah:Dapatkan hitungan berapa banyak catatan yang perlu diperbarui, simpan setiap catatan secara asinkron dan panggilan balik saat sukses, yang akan mengurangi jumlah dan menutup DB jika hitungan mencapai 0 (ketika pembaruan terakhir selesai). Dengan menggunakan {safe:true}
kami dapat memastikan bahwa setiap pembaruan berhasil.
Server mongo akan menggunakan satu utas per koneksi, jadi sebaiknya a) menutup koneksi yang tidak digunakan, atau b) mengumpulkan/menggunakannya kembali.
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);
}
});
})
});
});