首页 > 解决方案 > 需要更改文档中的一个元素。- 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": "大象闻起来"}]})

我仍然卡在这里,请帮助。

标签: mongodb

解决方案


我相信位置运算符 $应该做你想做的事:

位置 $ 运算符充当与查询文档匹配的第一个元素的占位符

> 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" ] } ] }

推荐阅读