在mongoose中更新多个文档(Node JS)

时间:2018-03-12 08:43:38

标签: express mongoose mongodb-query nodes

我想用对象数组生成的查询更新多个文档。但是我发现只有一个文件被更改了。

var split = num.toString().split(',');
var list = new Array;
for ( var i in split ) {
    var pk = {
        "_id" : split[i],
        "id" : user.id
    }
    list.push(pk);
}

var vm = {name:"robert",category:"media"};

database.bookModel.findOneAndUpdate(list, vm, { multi: true }, function (err, result) {
....

以下方法我无法关注更新多个文档。 我正在使用findOneAndUpdate查询,我发现只会更改一条记录。

我做错了吗?有没有办法在对象数组中使用标准?

3 个答案:

答案 0 :(得分:0)

使用批量查找和更新

var bulk = db.Model.initializeUnorderedBulkOp();
var vm = {
  name: "robert",
  category: "media"
};

for (var i in split) {
  var pk = {
    "_id": split[i],
    "id": user.id
  }
  bulk.find(pk).update({
    $set: vm
  });
}

bulk.execute();

答案 1 :(得分:0)

您正在使用'findOneAndUpdate'它只会更新一个文档,尝试'更新',您应该没问题。

答案 2 :(得分:0)

您需要像这样更改查询:

database.bookModel.update(list, vm, {
    multi: true
}).then(() => {
    res.status(200).json({
        message: 'Data updated successfully!'
    })
}).catch((err) => {
    res.status(500).json({
        error: err
    });
});