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

MongoDB聚合管道:将文档列表转为ID列表的最优方案

问题:MongoDB聚合管道转换文档集合的高效实现方式

现有文档集合如下:

[ { id: 1 }, {id: 2}, {id: 3} ]

需将其转换为以下两种格式之一:
格式A(含字段的文档):

{ ids: [1, 2, 3] }

格式B(纯数组):

[1, 2, 3]

哪种聚合管道实现的效率最高?


结论

生成**格式B(纯数组)**的聚合管道效率更高,核心原因是它的处理逻辑更直接,减少了一层文档结构的包装与序列化开销。

具体实现及解析

1. 格式B的高效实现

db.collection.aggregate([
  // 收集所有文档的id到数组
  { $group: { _id: null, ids: { $push: "$id" } } },
  // 直接将数组作为输出根文档
  { $replaceRoot: { newRoot: "$ids" } }
])

如果使用MongoDB 4.4及以上版本,也可以用更简洁的$replaceWith替代$replaceRoot:

db.collection.aggregate([
  { $group: { _id: null, ids: { $push: "$id" } } },
  { $replaceWith: "$ids" }
])

这个流程仅需两个阶段:先通过$group聚合所有id到数组,再直接将数组作为输出结果,没有多余的字段处理步骤。

2. 格式A的实现

db.collection.aggregate([
  { $group: { _id: null, ids: { $push: "$id" } } },
  // 剔除_id字段,保留ids字段
  { $project: { _id: 0 } }
])

这个流程需要在聚合后维护文档的键值结构,输出一个包含ids数组的文档,虽然性能差距不大,但相比格式B多了一层文档结构的处理,在数据量较大时会产生细微的效率差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:57:41