首页 > 解决方案 > 如果在 mongodb 集合中满足条件,则在数组对象中添加两个新字段

问题描述

[
  {
    "Empname": "Doug",
    "Group": [
      {
        "Category": [
          {
            "Categoryid": 123,
            "Categoryname": "science"
          },
          {
            "Categoryid": 233,
            "Categoryname": "Maths"
          }
        ]
      }
    ]
  },
  {
    "Empname": "stark",
    "Group": [
      {
        "Category": [
          {
            "Categoryid": 123,
            "Categoryname": "science"
          },
          {
            "Categoryid": 144,
            "Categoryname": "language "
          }
        ]
      }
    ]
  }
]

这里我想插入两个字段,如果满足以下条件

{
  "Categoryid": 123,
  "Categoryname": "science"
}

输出应该像

[
  {
    "Empname": "Doug",
    "Group": [
      {
        "Category": [
          {
            "Categoryid": 123,
            "Categoryname": "science"
            "CategoryLabel": "Hex",
            "CategoryCode": "Hex-D",
          },
          {
            "Categoryid": 233,
            "Categoryname": "Maths"
          }
        ]
      }
    ]
  },
  {
    "Empname": "stark",
    "Group": [
      {
        "Category": [
          {
            "Categoryid": 123,
            "Categoryname": "science",
            "CategoryLabel": "Hex",
            "CategoryCode": "Hex-D",
          },
          {
            "Categoryid": 144,
            "Categoryname": "language "
          }
        ]
      }
    ]
  }
]

标签: mongodbmongodb-queryinsertarraycollection

解决方案


您需要 update witharrayFilters以满足Category数组的条件。

并带有multi: true更新多个文档。

db.collection.update({},
{
  $set: {
    "Group.$[].Category.$[category].CategoryLabel": "Hex",
    "Group.$[].Category.$[category].CategoryCode": "Hex-D"
  }
},
{
  arrayFilters: [
    {
      "category.Categoryid": 123,
      "category.Categoryname": "science"
    }
  ],
  multi: true
})

示例 Mongo Playground


推荐阅读