【问题标题】:Need to change one element from a document. - MongoDB需要更改文档中的一个元素。 - MongoDB
【发布时间】: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


    【解决方案1】:

    我相信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" ] } ] }
    

    【讨论】:

    • 与 $[] 运算符发生相同的情况。我在查询中保存了一些字符,但它仍然改变了这两个元素。
    猜你喜欢
    • 2019-02-09
    • 2022-12-05
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2022-08-03
    • 2016-11-18
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多