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

MongoDB中为数组元素添加字段并处理空数组场景

MongoDB 给passengerDetails数组统一添加contactPerson字段的解决方案

可以通过聚合管道的$addFields结合$cond、$map、$ifNull来实现所有场景的需求,不管数组是存在且非空、空数组、null还是不存在,都能输出符合要求的结构:

db.collection.aggregate([
  {
    $addFields: {
      passengerDetails: {
        $cond: {
          if: { $gt: [{ $size: { $ifNull: ["$passengerDetails", []] } }, 0] },
          then: {
            $map: {
              input: "$passengerDetails",
              as: "passenger",
              in: {
                $mergeObjects: ["$$passenger", { contactPerson: "$contactPerson" }]
              }
            }
          },
          else: [{ contactPerson: "$contactPerson" }]
        }
      }
    }
  }
])

逻辑说明

  • $ifNull:把passengerDetails为null或不存在的情况统一转为空数组,避免后续判断出错
  • $size + $gt:判断处理后的数组是否有元素,以此区分两种场景
  • 当数组非空时,用$map遍历每个元素,通过$mergeObjects把顶层的contactPerson合并到每个乘客对象中
  • 当数组为空、null或不存在时,直接生成包含单个contactPerson对象的数组

测试场景验证

  • 原文档(数组非空):处理后passengerDetails的每个元素都会新增contactPerson字段,和需求完全匹配。
  • passengerDetails为空数组:输出的passengerDetails为包含contactPerson的单元素数组。
  • passengerDetails为null:输出结果和空数组场景一致。
  • passengerDetails字段不存在:同样生成符合要求的单元素数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:09