Mongodb 根据属性值更新数组中的多个嵌入文档

Mongodb 根据属性值更新数组中的多个嵌入文档,mongodb,Mongodb,我有一个演示集。在集合的每个文档中都有一个包含多个文档的数组。示例文档为: { _id: 1, persons: [{ name: "Jack", gender: "Male" }, { name: "Ma", gender: "Female" }, { name: "Ho", gender: "Other" }] } 我想只更改文档_id=1的persons数组中嵌套文档的gender=Male和gender=Other的n

我有一个演示集。在集合的每个文档中都有一个包含多个文档的数组。示例文档为:

{
  _id: 1,
  persons: [{
    name: "Jack",
    gender: "Male"
  }, {
    name: "Ma",
    gender: "Female"
  }, {
    name: "Ho",
    gender: "Other"
  }]
}
我想只更改文档_id=1的persons数组中嵌套文档的gender=Male和gender=Other的name属性,并且根据gender的值,每个文档值的name属性将不同

认为性别=男性文档名称的值将是Jul,性别=其他文档名称的值将是Tisa

如何设计单个更新查询?

您想使用

编辑:


我编辑了我的答案,只需更改ArrayFilter的条件。

db.collection.updateOne(
    {
        _id: 1,
    },
    {
        $set: {
            "persons.$[elem].name": "new_name",
        }
    },
    {
        arrayFilters: [{"elem.gender": {$in: ["Male", "Other"]}}]
    });
db.collection.updateOne(
    {
        _id: 1,
    },
    {
        $set: {
            "persons.$[elem].name": "Jul",
            "persons.$[elem2].name": "Tisa",
        }
    },
    {
        arrayFilters: [
            {"elem.gender": "Male"},
            {"elem2.gender": "Other"},
        ]
    });