我正在尝试遵循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(“ 5c6ee5d5e5e12e25dc1ab99b3e”)},{“ 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]”:“女巫跳了昏昏欲睡的狗“”} ,, {arrayFilters:[{“ enun”:“大象闻到了”}]}})
我仍然在这里,请帮忙。
答案 0 :(得分:0)
我相信positional operator $应该做您想要的事情:
位置$运算符充当与查询文档匹配的第一个元素的占位符
> db.test_coll.insert({arr: [{nested: ["hello", "hello", "goodbye"]}]})
> db.test_coll.update({"arr.nested": "hello"}, {$set: {"arr.$[].nested.$": "updated"}});
> db.test_coll.find({})
{ "_id" : ObjectId("5c7344d94b434de8affa5b73"), "arr" : [ { "nested" : [ "updated", "hello", "goodbye" ] } ] }