Le mieux est de faire cette mise à jour en utilisant bulkWrite
API. Considérez l'exemple suivant pour les deux documents ci-dessus :
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);
}
Le {"ordered": true, "w": 1}
garantit que les documents seront mis à jour sur le serveur en série, dans l'ordre indiqué et donc si une erreur se produit, toutes les mises à jour restantes sont interrompues. Le {"w": 1}
L'option détermine le problème d'écriture, 1 étant un accusé de réception de la demande que l'opération d'écriture s'est propagée au mongod autonome ou au primaire dans un jeu de répliques.
Pour MongoDB >= 2.6
et <= 3.0
, utilisez l'l'API des opérations en masse
comme suit :
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);
});