在Mongoose中更新具有不同值的多个元素

我有包含列表的文档。 让我们说他们是:

[ { _id: 52b37432b2395e1807000008, name: ListA, order: 1, desc: 'More about List A' }, { _id: 52b37432b2395e1807000009, name: LISTB, order: 2, desc: 'More about List B' }, { _id: 52b37432b2395e180700000e, name: LISTC, order: 3, desc: 'More about List C' }, { .. } ] 

现在我想使用批量更新来更改他们的订单字段。 我有一个JSON的updated_stage顺序

 var updated_stage = [{_id: '52b37432b2395e1807000008', order:2},{_id: '52b37432b2395e180700000e', order:1}, {_id: '52b37432b2395e1807000009', order:3}] 

现在我需要用我有的新数组更新Mongoose中的LIST模型。 我知道我可以使用批量更新来更新具有相同值的多个文档

 Model.update({ }, { $set: { order: 10 }}, { multi: true }, callback); 

但是我必须通过不同的值更新它们。 我应该怎么做? 最有效的方法是什么?

我能想到的最有效的方法是在你的updated_satge数组上运行一个forEach循环。 现在在mongodb中的现有文档中使用_id和update命令。

这里我的testing与collection.forEach然后调用doc.save:

我用sync.each知道什么时候所有的文件都保存了

 var mongoose = require('mongoose'), async = require('async'); mongoose.connect('localhost', 'learn-mongoose'); var User = mongoose.model('User', {name: String}); async.series([ function (done) { // remove User collection if exist User.remove(done); }, function(done) { // re-create a collection with 2 users 'Mr One', 'Mr Two' User.create([{name: 'Mr One'}, {name: 'Mr Two'}], done); }, function(done) { // upperCase user.name User.find(function(err, users) { async.each(users, function(user, callback) { user.name = user.name.toUpperCase(); user.save(callback); }, done); // done is call when all users are save!!!! }); }, function(done) { // print result User.find(function(err, users) { console.log(users); done(); }); }, ], function allTaskCompleted() { console.log('done'); mongoose.disconnect(); });