我有以下架构:
const itemsSchema = new mongoose.Schema({
name: String,
checkedValue: String
});
const listSchema = new mongoose.Schema({
name: String,
items: [itemsSchema]
});
我想更新这样的数据:listSchema
>items
>checkedValue
。我执行了以下操作:
db.collections.update({
"name": "Home"
},
{
"$set": {
"items.$[i].checkedValue": "On"
}
},
{
arrayFilters: [
{
"i.items._id": ObjectId("646ec7836f8ba817e80e3372")
}
]
})
但我收到错误未找到文档
。如何更新具体文档?
示例数据:
[
{
_id: ObjectId("646ec7916f8ba817e80e3377"),
name: 'Home',
items: [
{
name: 'home 1',
checkedValue: 'Off',
_id: ObjectId("646ec7966f8ba817e80e3380")
},
{
name: 'home 2',
checkedValue: 'Off',
_id: ObjectId("646ec79a6f8ba817e80e338c")
},
{
name: 'home 3',
checkedValue: 'Off',
_id: ObjectId("646efd38b1bc960c52ce5078")
}
],
__v: 3
},
{
_id: ObjectId("646ed4136f8ba817e80e339b"),
name: 'School',
items: [
{
name: 'School 1',
checkedValue: 'Off',
_id: ObjectId("646efd45b1bc960c52ce509c")
},
{
name: 'School 2',
checkedValue: 'Off',
_id: ObjectId("646efd4cb1bc960c52ce50a9")
},
{
name: 'School 3',
checkedValue: 'Off',
_id: ObjectId("646efd52b1bc960c52ce50b1")
}
],
__v: 4
}
]
最佳答案
您在数组过滤器中给出的对象 ID 不在项目列表中。无论如何,即使它按照您编写的 arrayFilters
方式执行,也必须更改为 i._id
。将 i
视为 items
数组中的单个元素
db.collection.update({
name: "Home"
},
{
$set: {
"items.$[i].checkedValue": "On"
}
},
{
arrayFilters: [
{
"i._id": ObjectId("646ec7966f8ba817e80e3380")
}
]
})
关于node.js - 更新 mongoDB 中嵌套文档中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76329403/