【发布时间】:2019-02-24 22:45:07
【问题描述】:
我正在尝试按照 mongoDB 上的文档更改数组中的一个元素,在数组中,在数组中。
这是我的元素
secciones: [
{
_id: ObjectId("5c6ee5d5e12e25dc1ab99b3e"),
subSeccion: [
{
_id: ObjectId("5c6ee5d5e12e25dc1ab99b3f"),
subSeccionItems: [
"The witch jumps over the sleepy dog",
"The witch jumps over the sleepy dog",
"The dog eats"
"The cat scratches"
]
}
]
}
]
问题在于,使用这个命令,它会同时改变“女巫跳过昏昏欲睡的狗,而我只需要改变一个”:
db.pautas.updateOne({_id:ObjectId("5c6ee5d5e12e25dc1ab99b37")}, {$set: {"criterios.secciones.$[id].subSeccion.$[id2].subSeccionItems.$[enun]": "The witch jumps over the sleepy dog"}}, { arrayFilters: [ { "id._id": ObjectId("5c6ee5d5e12e25dc1ab99b3e")}, {"id2._id": ObjectId("5c6ee5d5e12e25dc1ab99b3f")}, {"enun": "The elephant smells"}]})
未格式化的相同命令:
db.pautas.updateOne({_id:ObjectId("5c6ee5d5e12e25dc1ab99b37")}, {$set: {"criterios.secciones.$[id].subSeccion.$[id2].subSeccionItems.$[enun]": "睡狗的女巫跳"}}, { arrayFilters: [ { "id._id": ObjectId("5c6ee5d5e12e25dc1ab99b3e")}, {"id2._id": ObjectId("5c6ee5d5e12e25dc1ab99b3f")}, {"enun" : "大象闻起来"}]})
我正在使用此文档:https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
该命令有效,但更改了两个元素,我只需要更改一个。
问候。
更新
现在有了@willis 的答案,我尝试了这个查询并得到了相同的结果。我保存了一些字符,但没有得到我需要的结果,即仅更改一个出现的相关项目。
db.pautas.updateOne({_id:ObjectId("5c6ee5d5e12e25dc1ab99b37")}, {$set: {"criterios.secciones.$[].subSeccion.$[].subSeccionItems.$[enun]": "The witch jumps of the sleepy dog"}}, { arrayFilters: [ {"enun": "The elephant smells"}]})
未格式化:
db.pautas.updateOne({_id:ObjectId("5c6ee5d5e12e25dc1ab99b37")}, {$set: {"criterios.secciones.$[].subSeccion.$[].subSeccionItems.$[enun]": "The睡狗的女巫跳跃"}}, { arrayFilters: [ {"enun": "大象闻起来"}]})
我还是卡在这里,请帮忙。
【问题讨论】:
标签: mongodb