Mongoose - 查询深度嵌套的对象

Mongoose - Query deeply nested Objects

我目前遇到一个问题,我必须更新深层嵌套文档中的条目。现在为了简化我的问题,我有这个例子。假设我将汽车存放在 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 个阵列时,我对如何更新特定螺钉感到很迷茫。知道我如何才能完成这项工作吗?

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

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