È meglio eseguire questo aggiornamento utilizzando bulkWrite
API. Considera il seguente esempio per i due documenti precedenti:
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);
}
Il {"ordered": true, "w": 1}
assicura che i documenti vengano aggiornati serialmente sul server, nell'ordine previsto e quindi se si verifica un errore tutti gli aggiornamenti rimanenti vengono annullati. Il {"w": 1}
l'opzione determina il problema di scrittura con 1 come riconoscimento della richiesta che l'operazione di scrittura si è propagata al mongod autonomo o al primario in un set di repliche.
Per MongoDB >= 2.6
e <= 3.0
, utilizza l'API per le operazioni in blocco
come segue:
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);
});