首页/数据/NoSQL 速查/聚合性能优化要点
MongoDB99 条

聚合性能优化要点

管道性能看三条:尽早过滤、尽量走索引、控制中间结果体积;照此调整阶段顺序通常收益明显。

NoSQL 速查数据更新于 2026-10-12
  • $match/$limit 前移:首阶段 $match 直接利用索引,能砍掉后续全部计算量
  • 用 $project 裁剪字段:越早减少字段与文档体积,后续排序分组越轻
  • $sort 放在被截断前:$sort 紧跟 $limit 可走堆排序
  • $lookup 控制关联侧:foreignField 建索引或改管道式写法先过滤
  • 大分组设置 allowDiskUse:避免 100MB 内存上限报错

先瘦身再分组

先瘦身再分组
db.events.aggregate([
  { $match: { day: "2026-10-12" } },
  { $project: { userId: 1, action: 1, _id: 0 } },
  { $group: { _id: { userId: "$userId", action: "$action" }, n: { $sum: 1 } } }
])
用 explain 的 executionStats 检查首阶段是否 IXSCAN、扫描量是否与返回量接近。

易错点

  • 把过滤写在 $project 的表达式里不会减少输入文档,还要靠 $match 才真正裁剪数据

数据来源与参考

  • MongoDB Manual: Aggregation Pipeline Optimization
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌