如何使用findByIdAndUpdate使用Mongoose更改子数组

时间:2018-06-15 20:19:32

标签: node.js mongodb mongoose

我正在创建一个MEAN堆栈来做列表,并需要有关以下Mongoose语法的帮助。

我正在尝试将todos数组的已完成字段更新为true。通过研究,我能够使用Mongoose模型findOneAndUpdate更新我的子文档。

但是,我也在尝试学习如何使用findByIdAndUpdate。我似乎无法让它发挥作用。我哪里错了?

我的带有嵌套子文档的Mongoose文档:

{
    //this is my userID
    "_id": ObjectId("5b21cbdeebe2b414906b2b31"),
    "username": "john",
    "todos": [{
        // this is my id
        "_id": ObjectId("5b21cbdeebe2b414906b2b32"),
        "item": "testing",
        "completed": false
    }, {
        // this is my id
        "_id": ObjectId("5b22dd570f15b72e949591f6"),
        "item": "adding new",
        "completed": false
    }]
}

My Mongoose功能:

module.exports.markItemCompleted = function(id, callback) {
  Item.findByIdAndUpdate(id, { $set: { completed: true }}, callback);
}

1 个答案:

答案 0 :(得分:1)

您需要使用$[] positional运算符才能更新数组中的每个元素

module.exports.markItemCompleted = function(id, callback) {
  Item.update(
    { _id: id },
    { $set: { 'todos.$[].completed': true }}, callback
  );
}

注意:您应该 mongodb版本3.6