我目前有一个问题,我必须更新一个深度嵌套的文档条目。现在为了简化我的问题,我有一个例子。假设我在MongoDB中存储汽车。文件应该是这样的

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

现在,如果我想更新一个特定的轮子,我的代码看起来有点像这样
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 } ] })

10-06 14:18