用不同的值更新mongoDB中的许多文档

我试图用两个不同的值更新mongoDB中的两个文档。 我用两个不同的callback做了它,但是只有一个请求可以做到吗?

我的解决scheme

mongo.financeCollection.update( { 'reference': 10 }, { $push: { history: history1 } }, function (err){ if (err){ callback (err); } else { mongo.financeCollection.update( { 'reference': 20 }, { $push: { history: history2 } }, function (err){ if (err){ callback(err); } else { callback(null); } }); } }); 

对不起,如果这是一个愚蠢的问题,但我只是想优化我的代码!

最好使用bulkWrite API来执行此更新。 考虑以上两个文件的例子:

 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}确保文档将按照提供的顺序在服务器上连续更新,因此如果发生错误,所有剩余的更新将被中止。 {"w": 1}选项确定写入关注,其中1是写入操作已传播到独立mongod或副本集中的主节点的请求确认。


对于MongoDB >= 2.6<= 3.0 ,请按如下所示使用Bulk Operations API :

 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); });