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

MongoDB 3.0聚合操作:仅为非空olderAdress数组的元素新增字段

MongoDB 3.0 适配聚合查询语句

MongoDB 3.0 版本不支持$addFields、$mergeObjects等高版本操作符,我们使用$project阶段结合原生支持的$cond、$map操作符实现需求,语句如下:

db.你的集合名.aggregate([
  {
    $project: {
      // 保留原有所有顶层字段
      type: 1,
      code: 1,
      Name: 1,
      currency: 1,
      status: 1,
      localization: 1,
      createDate: 1,
      olderAdress: {
        $cond: {
          // 先判断olderAdress是否为null
          if: { $eq: [ "$olderAdress", null ] },
          // 为null直接返回原值
          then: null,
          // 不为null则遍历数组每个元素追加字段
          else: {
            $map: {
              input: "$olderAdress",
              as: "addrItem",
              in: {
                // 保留原有地址元素的所有属性
                localization: "$$addrItem.localization",
                status: "$$addrItem.status",
                createDate: "$$addrItem.createDate",
                // 新增要求的标记字段
                isItemOfOlderAddress: true
              }
            }
          }
        }
      }
      // 如果你期望结果里的字段名是正确拼写的olderAddress,把上面的键名olderAdress改成olderAddress即可
    }
  }
])

补充说明

如果后续你升级到MongoDB 3.2及以上版本,可以用更简洁的写法,不需要显式列出所有要保留的顶层字段:

db.你的集合名.aggregate([
  {
    $addFields: {
      olderAdress: {
        $cond: {
          if: { $eq: [ "$olderAdress", null ] },
          then: null,
          else: {
            $map: {
              input: "$olderAdress",
              as: "addrItem",
              in: { $mergeObjects: [ "$$addrItem", { isItemOfOlderAddress: true } ] }
            }
          }
        }
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:27:02