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

MongoDB:如何将$facet聚合输出的结果两两合并?

实现方案

你可以在原有$facet阶段后新增一个$project阶段,使用$concatArrays操作符完成两两数组合并,完整聚合语句如下:

db.collection.aggregate([
  {
    "$facet": {
      "1": [
        {
          $match: {
            "ID": "2"
          }
        }
      ],
      "2": [
        {
          $match: {
            "array.ID": "2"
          }
        }
      ],
      "3": [
        {
          $match: {
            "array.ID": "4"
          }
        }
      ],
      "4": [
        {
          $match: {
            "ID": "4"
          }
        }
      ]
    }
  },
  {
    $project: {
      // 合并facet 1和2的结果为第一组
      "1": { $concatArrays: ["$1", "$2"] },
      // 合并facet 3和4的结果为第二组
      "2": { $concatArrays: ["$3", "$4"] }
    }
  }
])

逻辑说明

  • $concatArrays可以安全拼接数组,即使其中某一个facet返回空数组也不会出错,完全符合你提到的「每组两个facet最多返回1条记录」的场景。
  • 如果后续facet数量增加,只要按序号两两配对,在$project里新增对应的合并规则即可,比如facet 5和6合并为键"3",以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:06