如何在MongoDB中使用条件更新所有嵌套数组

如何在MongoDB中使用条件更新所有嵌套数组,mongodb,mongoose,mongodb-query,aggregation-framework,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我有一个嵌套对象的数组。如果消息是“你好”,我想把它改为“你好”。这是我的阵列: [{ name : "name", email : "email", conversation : [ { message : "Hi", seenBy : "karen" }, { message : "Hi", seenBy : "leo"

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

[{
  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}
  )
但它会将所有消息更新为“你好”,即使不是“你好”的消息

使用

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

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