【问题标题】:How to update all all nested array with condition in MongoDB如何在 MongoDB 中使用条件更新所有嵌套数组
【发布时间】:2021-07-14 15:58:38
【问题描述】:

我有一个包含嵌套对象的数组。如果消息是“你好”,我想把它改成“你好”。这是我的数组:

[{
  name : "name",
  email : "email",
  conversation : [
  {
    message : "Hi",
    seenBy : "karen"
  },
  {
    message : "Hi",
    seenBy : "leo"
  },
  {
    message : "Goodbye",
    seenBy : "mark"
  }
 ]
},
{
  name : "name",
  email : "email",
  conversation : [
  {
    message : "Hi",
    seenBy : "karen"
  },
  {
    message : "Listen",
    seenBy : "leo"
  },
  {
    message : "Sit",
    seenBy : "mark"
  },
{
    message : "Hi",
    seenBy : "mark"
  }
 ]
}]

这是我试过的:

db.updateMany({ conversation: { $elemMatch: { message: "Hi" } } },
  { $set: {"items.$[].message": "Hello" }},
  {multi: true}
  )

但它会将所有消息更新为“Hello”,即使消息不是“Hi”

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    演示 - https://mongoplayground.net/p/AUJ8k2S6S5H

    使用$[<identifier>]

    过滤后的位置运算符 $[] 标识与更新操作的 arrayFilters 条件匹配的数组元素,

    db.collection.update(
      {conversation: { $elemMatch: { message: "Hi" } } },
      { $set: { "conversation.$[c].message": "Hello" } },
      { multi: true, arrayFilters: [ { "c.message": "Hi" } ]}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 2019-06-08
      • 2018-10-22
      相关资源
      最近更新 更多