需要更改文档中的一个元素。 -MongoDB

时间:2019-02-24 22:45:08

标签: 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(“ 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”:“大象闻到了”}]}})

我仍然在这里,请帮忙。

1 个答案:

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