Dev*_*mar 11 batch-file mongoose mongodb node.js
我有包含列表的文档.让我们说他们是:
[
{
_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'
},
{
..
}
]
Run Code Online (Sandbox Code Playgroud)
现在我想使用批量更新来更改其订单字段.我有一个update_stage命令的JSON
var updated_stage = [{_id: '52b37432b2395e1807000008', order:2},{_id: '52b37432b2395e180700000e', order:1}, {_id: '52b37432b2395e1807000009', order:3}]
Run Code Online (Sandbox Code Playgroud)
现在我需要使用我拥有的新数组更新Mongoose中的LIST模型.我知道我可以使用批量更新更新具有相同值的多个文档
Model.update({ }, { $set: { order: 10 }}, { multi: true }, callback);
Run Code Online (Sandbox Code Playgroud)
但我必须用不同的值来更新它们.我该怎么办?什么是最有效的方式?
我能想到的最有效的方法是forEach
在你的updated_satge
数组上运行一个循环。现在在 mongodb 中的现有文档中获取 _id 和更新顺序。
这是我使用 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();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5974 次 |
最近记录: |