猫鼬-查询深度嵌套的对象

时间:2019-04-30 08:46:05

标签: node.js database mongodb mongoose nested-object

我目前遇到一个问题,我必须更新深层嵌套文档中的条目。现在简化我的问题,我有这个例子。假设我将汽车存储在MongoDB中。文档看起来像这样

{
  Make: "BMW",
  Model: "3Series",
  Wheels: [
    {
      _id: someObjectId
      Size: "19 inch",
      Screws: [
        {
          _id: someObjectId
          Type : "M15x40"
        },
        {
          _id: someObjectId
          Type : "M15x40"
        }
      ]
    }
  ]
}

现在,如果我想更新特定的Wheel,我的代码将看起来像这样

CarModel.findOneAndUpdate({
  "_id": CarId, "Wheels._id": WheelId
}, {
  "$set" : {
    "Wheels.$.Size": NewSize
  }
})

现在这可行。但是当我经历2个数组时,我对如何更新特定的螺丝感到非常迷惑。知道我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

您需要arrayFilters功能来定义多个嵌套数组的路径:

CarModel.findOneAndUpdate(
    { "_id": CarId },
    { $set: { "Wheels.$[wheel].Screws.$[screw].Type": "something" } },
    { arrayFilters: [ { 'wheel._id': WheelId }, { 'screw._id': screwId } ] })