mongodb - 需要更改文档中的一个元素。- MongoDB
问题描述
我正在尝试按照 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": "The大象气味"}]})
我正在使用这个文档: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": "大象闻起来"}]})
我仍然卡在这里,请帮助。
解决方案
我相信位置运算符 $应该做你想做的事:
位置 $ 运算符充当与查询文档匹配的第一个元素的占位符
> 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" ] } ] }
推荐阅读
- graphql - Strapi - 如何使用自定义属性扩展 graphql 类型模式?
- pandas - 为什么 Pandas 不允许我使用列表添加行而不添加 []?
- python - tripadvisor 上的餐厅网址已编码,因此我无法抓取它
- javascript - 我想在 tensorflow 数据集中添加更多数据?我的应用程序使用 java 在 android 上构建
- python - 使用线程时未触发 Pyttsx3 回调
- c++ - 从已知大小和一些索引字符的文件中搜索字符串
- javax.imageio - 编写大图像精灵表
- drupal - 如何通过预处理主题功能将放置在树枝文件中的块限制为内容类型中的某些页面?
- ocaml - 如何从同一模块返回一流模块?
- azure - 如何在 azure board 中的 bug 下拉列表中填充找到的内容