如何在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" } ]}
)