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 } ] })
我目前遇到一个问题,我必须更新深层嵌套文档中的条目。现在为了简化我的问题,我有这个例子。假设我将汽车存放在 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 } ] })