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

MongoDB聚合管道拼接两个$lookup返回数组结果为null如何解决

MongoDB聚合$concatArrays返回null问题排查

问题现象

在单条聚合管道中拼接两次$lookup返回的数组时,$concatArrays执行结果始终为null。已确认两次$lookup执行正常,返回值均为数组类型,同一$project阶段可正常访问这两个字段。
问题涉及的$project阶段代码:

{
    $project: {
      _id: 0,
      visitsTime: 1,
      bracketsTime: 1,
      chartResult: {
        $concatArrays: [
          "$visitsTime",
          "$bracketsTIme"
        ]
      }
    }
  }

执行返回结果:

[
  {
    "bracketsTime": [
      {
        "date": "04-08-2022",
        "entryHours": 4.25
      },
      {
        "date": "04-10-2022",
        "entryHours": 6.5
      }
    ],
    "chartResult": null,
    "visitsTime": [
      {
        "date": "04-20-2022",
        "visitHours": 1
      },
      {
        "date": "04-10-2022",
        "visitHours": 3
      },
      {
        "date": "04-08-2022",
        "visitHours": 2
      },
      {
        "date": "05-26-2022",
        "visitHours": 2
      }
    ]
  }
]

问题原因

属于字段名大小写拼写错误:

  • 实际存在的数组字段名为bracketsTime,后缀Time仅首字母T大写,后续i、m、e均为小写
  • $concatArrays中引用的字段误写为$bracketsTIme,后缀第二个字母I错误大写
    MongoDB字段名严格区分大小写,引用不存在的字段时会返回null;而$concatArrays的运算规则是只要任意入参不是数组(包含null、字段不存在、值为其他类型的情况),整个表达式就会返回null,这就是结果始终为空的根本原因,和$lookup的返回值类型没有关系。

修复方法

把$concatArrays里的字段引用改成正确拼写即可:

{
    $project: {
      _id: 0,
      visitsTime: 1,
      bracketsTime: 1,
      chartResult: {
        $concatArrays: [
          "$visitsTime",
          "$bracketsTime"
        ]
      }
    }
  }

修改后chartResult会正常返回两个数组合并后的结果。

优化建议

如果业务场景中存在$lookup匹配不到数据、字段可能为空的情况,可以搭配$ifNull给字段设置空数组默认值做兜底,避免单字段为空导致整个拼接结果失效,写法参考:

chartResult: {
  $concatArrays: [
    { $ifNull: ["$visitsTime", []] },
    { $ifNull: ["$bracketsTime", []] }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:54:23