You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB集合满足条件时为嵌套数组对象新增两个字段的实现方法

你可以使用MongoDB的arrayFilters特性实现嵌套数组元素的条件更新,以下是适用于MongoDB 3.6及以上版本的操作语句,执行后会直接修改集合中原有的数据:

// 请将下方的「yourCollection」替换为你实际的集合名称
db.yourCollection.updateMany(
  // 前置过滤:仅筛选出包含符合要求的Category元素的文档,可提升更新性能,无需要也可直接写{}
  {
    "Group.Category": {
      $elemMatch: {
        Categoryid: 123,
        Categoryname: "science"
      }
    }
  },
  // 更新规则:给匹配到的Category对象新增两个指定字段
  {
    $set: {
      "Group.$[group].Category.$[cate].CategoryLabel": "Hex",
      "Group.$[group].Category.$[cate].CategoryCode": "Hex-D"
    }
  },
  // 数组过滤规则:分别指定两层嵌套数组的匹配条件
  {
    arrayFilters: [
      // 第一层Group数组匹配规则,此处无额外限制所以写空对象,有过滤需求可自行补充
      {},
      // 第二层Category数组匹配规则,仅匹配符合你要求的元素
      {
        "cate.Categoryid": 123,
        "cate.Categoryname": "science"
      }
    ]
  }
)

如果你不需要修改原集合数据,仅在查询时返回新增字段后的结果,可以使用如下聚合查询语句:

// 请将下方的「yourCollection」替换为你实际的集合名称
db.yourCollection.aggregate([
  {
    $addFields: {
      Group: {
        $map: {
          input: "$Group",
          as: "group",
          in: {
            $mergeObjects: [
              "$$group",
              {
                Category: {
                  $map: {
                    input: "$$group.Category",
                    as: "cate",
                    in: {
                      $cond: [
                        {
                          $and: [
                            {$eq: ["$$cate.Categoryid", 123]},
                            {$eq: ["$$cate.Categoryname", "science"]}
                          ]
                        },
                        {$mergeObjects: ["$$cate", {CategoryLabel: "Hex", CategoryCode: "Hex-D"}]},
                        "$$cate"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

内容的提问来源于stack exchange,提问作者Franklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:45:01