É melhor fazer essa atualização usando o
bulkWrite
API. Considere o seguinte exemplo para os dois documentos acima: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);
}
O
{"ordered": true, "w": 1}
garante que os documentos serão atualizados no servidor serialmente, na ordem fornecida e, portanto, se ocorrer um erro, todas as atualizações restantes serão abortadas. O {"w": 1}
A opção determina a preocupação de gravação com 1 sendo uma confirmação de solicitação de que a operação de gravação foi propagada para o mongod autônomo ou o primário em um conjunto de réplicas. Para MongoDB
>= 2.6
e <= 3.0
, use a API de operações em massa
do seguinte modo: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);
});