node.js - 更新 mongoDB 中嵌套文档中的值

标签 node.js mongodb mongoose

我有以下架构:

const itemsSchema = new mongoose.Schema({
    name: String,
    checkedValue: String
});

const listSchema = new mongoose.Schema({
    name: String,
    items: [itemsSchema]
});

我想更新这样的数据:listSchema>items>checkedValue。我执行了以下操作:

db.collections.update({
  "name": "Home"
},
{
  "$set": {
    "items.$[i].checkedValue": "On"
  }
},
{
  arrayFilters: [
    {
      "i.items._id": ObjectId("646ec7836f8ba817e80e3372")
    }
  ]
})

但我收到错误未找到文档。如何更新具体文档?

示例数据:

[
  {
    _id: ObjectId("646ec7916f8ba817e80e3377"),
    name: 'Home',
    items: [
      {
        name: 'home 1',
        checkedValue: 'Off',
        _id: ObjectId("646ec7966f8ba817e80e3380")
      },
      {
        name: 'home 2',
        checkedValue: 'Off',
        _id: ObjectId("646ec79a6f8ba817e80e338c")
      },
      {
        name: 'home 3',
        checkedValue: 'Off',
        _id: ObjectId("646efd38b1bc960c52ce5078")
      }
    ],
    __v: 3
  },
  {
    _id: ObjectId("646ed4136f8ba817e80e339b"),
    name: 'School',
    items: [
      {
        name: 'School 1',
        checkedValue: 'Off',
        _id: ObjectId("646efd45b1bc960c52ce509c")
      },
      {
        name: 'School 2',
        checkedValue: 'Off',
        _id: ObjectId("646efd4cb1bc960c52ce50a9")
      },
      {
        name: 'School 3',
        checkedValue: 'Off',
        _id: ObjectId("646efd52b1bc960c52ce50b1")
      }
    ],
    __v: 4
  }
]

最佳答案

您在数组过滤器中给出的对象 ID 不在项目列表中。无论如何,即使它按照您编写的 arrayFilters 方式执行,也必须更改为 i._id。将 i 视为 items 数组中的单个元素

db.collection.update({
  name: "Home"
},
{
  $set: {
    "items.$[i].checkedValue": "On"
  }
},
{
  arrayFilters: [
    {
      "i._id": ObjectId("646ec7966f8ba817e80e3380")
    }
  ]
})

playground

关于node.js - 更新 mongoDB 中嵌套文档中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76329403/

相关文章:

node.js - 使用 Id 作为 Post 方法的 Sequelize ExpressJS

mongodb - 基于mongodb的$lookup中的$sort的结果

javascript - 无法向 Mongoose 函数中的对象添加属性

node.js - Mongoose 没有方法 `connect`

node.js - 在 Mongoose 中创建用户

javascript - Multer file.filename 和 file.path 未定义

node.js - 如何保护 express.js 中的路由?

mysql - 如果使用 SQL 参数为 NULL,则返回所有值?

Mongodb:按数组对象排序文档

mongodb - Grails/MongoDB 删除所有