Najlepiej wykonać tę aktualizację za pomocą bulkWrite
API. Rozważ następujący przykład dla powyższych dwóch dokumentów:
var bulkUpdateOps = [
{
"updateOne": {
"filter": { "reference": 10 },
"update": { "$push": { "history": history1 } }
}
},
{
"updateOne": {
"filter": { "reference": 20 },
"update": { "$push": { "history": history2 } }
}
}
];
mongo.financeCollection.bulkWrite(bulkUpdateOps,
{"ordered": true, "w": 1}, function(err, result) {
// do something with result
callback(err);
}
{"ordered": true, "w": 1}
zapewnia, że dokumenty będą aktualizowane seryjnie na serwerze w podanej kolejności, dzięki czemu w przypadku wystąpienia błędu wszystkie pozostałe aktualizacje zostaną przerwane. {"w": 1}
opcja określa problem dotyczący zapisu, przy czym 1 jest potwierdzeniem żądania, że operacja zapisu została przekazana do samodzielnego mongod lub podstawowego w zestawie replik.
Dla MongoDB >= 2.6
i <= 3.0
, użyj interfejsu API operacji zbiorczych
w następujący sposób:
var bulkUpdateOps = mongo.financeCollection.initializeOrderedBulkOp();
bulkUpdateOps
.find({ "reference": 10 })
.updateOne({
"$push": { "history": history1 }
});
bulkUpdateOps
.find({ "reference": 20 })
.updateOne({
"$push": { "history": history2 }
});
bulk.execute(function(err, result){
bulkUpdateOps = mongo.financeCollection.initializeOrderedBulkOp();
// do something with result
callback(err);
});