Updating multiple items with different value in Mongoose

I have a document containing lists. Assume that they:

[ { _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' }, { .. } ] 

Now I want to change my order field using a batch update. I have updated order JSON

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

Now I need to update the LIST model in Mongoose with the new array that I have. I know that I can update multiple documents with the same value using batch update

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

But I have to update them with different values. How am I supposed to do this? What is the most effective way?

+8
mongodb mongoose batch-file
source share
2 answers

The most efficient way I could think of is to run a forEach loop over the updated_satge array. Now take the _id and update order in the existing document in mongodb.

+3
source share

Here is my test with collection.forEach then calls doc.save:

I use sync.each to know when all documents are saved

 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(); }); 
+3
source share

All Articles