如何一次更新多个mongodb记录?

时间:2016-02-08 12:02:48

标签: node.js mongodb express

所以我在后端使用express和mongodb创建一个基本的todo应用程序,我有一个如下所示的任务架构:

var taskSchema = mongoose.Schema({
    task: String,
    time:Date,
    done:Boolean,
    id:Number   
});

默认情况下,未设置完成,但是在前端我有一个无序列表和一堆行,每行都有一个复选框,我希望当用户从复选框中选择一个任务列表并单击时完成按钮它应该作为发布请求,mongodb应该立即更新所有任务,是否可能?我的方法是否正确?

1 个答案:

答案 0 :(得分:0)

假设这是db中的数据:

[
 {
   _id: "1",
   task: 'hello1',
   time: '11-02-2015',
   done: false
 },
 {
   _id: "2",
   task: 'hello2',
   time: '11-02-2015',
   done: false
 },
 {
   _id: "3",
   task: 'hello3',
   time: '11-02-2015',
   done: false
 },
 {
   _id: "4",
   task: 'hello4',
   time: '11-02-2015',
   done: false
 },
 {
   _id: "5",
   task: 'hello5',
   time: '11-02-2015',
   done: false
 }
];

因此,当您点击POST时,您将通过Done请求发送所有选定的任务(我们称之为数组)。

Array将包含taskIds列表,如下所示:

var tasksArr = [
  "1", "2", "3", "4"
];

所以你将在你的路线功能中做这样的事情。

var bulk = TaskSchema.collection.initializeUnorderedBulkOp();

for (var taskId in tasksArr) {
   bulk.find({_id: taskId}).update({
     '$set': {done: true}
   });
}

bulk.execute(function(err, bulkres) {
   console.log('modified:', bulkres.nModified);
});

希望这有帮助。

干杯,

相关问题