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

MongoDB如何将多文档字段聚合为对象内顺序一致的数组?

MongoDB聚合优化方案

完全可以仅用1次$group阶段实现需求,你原写法里的第二个$group是冗余逻辑,可以直接去掉。

核心逻辑

同一个$group阶段内的多个$push累加器,元素推入顺序完全一致:只要前置排序规则确定,categories数组第n位的团队ID,对应的count值一定在count集合的第n位,天然满足两个数组元素一一对应的要求。
另外注意,第一次按_id: null分组后,整个管道只会输出1条汇总结果,根本不需要再做第二次分组——$group是阻塞算子,能少用就少用,结构包装的逻辑直接放到$project阶段做就行,性能更好。

最终可用聚合管道

[
  // 可选阶段:需要固定categories排列顺序时保留,按自己的需求写排序规则即可
  // 不需要固定顺序可以直接删掉这个阶段,两个数组依然会保持元素对齐,只是顺序为MongoDB默认的文档读取顺序
  { $sort: { _id: 1 } },

  // 唯一的$group阶段,一次性收集对齐的团队ID和对应count数组
  {
    $group: {
      _id: null,
      categories: { $push: "$_id" },
      countList: { $push: "$count" }
    }
  },

  // 组装最终结构,去掉多余的_id字段
  {
    $project: {
      _id: 0,
      categories: 1,
      series: [{ counts: "$countList" }]
    }
  }
]

补充说明

这个管道输出的结构和你给出的目标结构完全一致:series是长度为1的数组,内部对象的counts数组和外层categories数组元素严格对齐,完全满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:39:36