我目前有一个问题,我必须更新一个深度嵌套的文档条目。现在为了简化我的问题,我有一个例子。假设我在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 } ] })