U kunt deze update het beste doen met de bulkWrite
API. Beschouw het volgende voorbeeld voor de bovenstaande twee documenten:
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);
}
De {"ordered": true, "w": 1}
zorgt ervoor dat de documenten serieel worden bijgewerkt op de server, in de opgegeven volgorde en dat als er een fout optreedt, alle resterende updates worden afgebroken. De {"w": 1}
optie bepaalt het schrijfprobleem, waarbij 1 een verzoekbevestiging is dat de schrijfbewerking is doorgegeven aan de zelfstandige mongod of de primaire in een replicaset.
Voor MongoDB >= 2.6
en <= 3.0
, gebruik de Bulk Opeartions API
als volgt:
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);
});