【问题标题】:How to use findByIdAndUpdate to change a subarray using Mongoose如何使用 findByIdAndUpdate 使用 Mongoose 更改子数组
【发布时间】:2018-11-25 16:30:39
【问题描述】:

我正在创建一个 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
    }]
}

我的猫鼬功能:

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    注意:您应该拥有 mongodb 3.6 版

    【讨论】:

    • 我试过这个,但它仍然不适合我。但是,您的信息链接非常有帮助。我最终坚持使用 findOneAndUpdate,这样我就可以继续我的项目了。显然,这是我以后必须重新审视的事情。我很欣赏你的回应。谢谢!!!
    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2021-10-23
    • 2021-05-26
    • 2015-01-22
    • 2014-02-19
    相关资源
    最近更新 更多