aggregate()(聚合管道)

最后更新:2026-10-09

aggregate()(聚合管道)

aggregate()通过聚合管道对文档进行分组、计算、连接等多阶段处理,例如`db.users.aggregate([{ $group: { _id: '$city', total: { $sum: 1 } } }])`。管道按顺序执行$match、$group、$sort、$project等阶段,数据逐级变换。它比find()强大得多,是报表统计、数据透视的首选。管道执行在服务端,返回游标或内联结果。

分类读取
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

db.<集合>.aggregate(<管道数组>, { allowDiskUse: <bool> })

⚙️ 参数

管道数组聚合阶段对象数组,如[{$match: {...}}, {$group: {...}}]。
allowDiskUse可选。true时允许将超过100MB内存的中间结果写盘。

返回值:包含聚合结果的游标;$out/$merge写结果到集合时返回空游标。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// aggregate:按城市分组统计用户数量
const result = db.users.aggregate([
  { $group: { _id: '$address.city', total: { $sum: 1 } } },
  { $sort: { total: -1 } }
])
result.toArray()

运行结果:

[
  { _id: 'Beijing', total: 12 },
  { _id: 'Shanghai', total: 8 }
]

📌 注意事项

📚 相关教程

❓ 常见问题

Qaggregate和find有什么区别?
Afind()只能查询和投影;aggregate()还能分组、计数、求和、连表,适合统计报表场景。
Q聚合结果超过内存限制怎么办?
A传入{allowDiskUse: true}允许中间结果写磁盘,或优化管道尽早用$match过滤数据。
Q聚合的结果怎么取?
A聚合返回游标,可调用.toArray()转数组或遍历;使用$out写回集合时返回空游标。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏