聚合管道的思维方式

聚合管道(Aggregation Pipeline)像一条数据流水线:文档从一端流入,依次经过一个个阶段(stage),每个阶段做一种变换(过滤、投影、分组、关联),最后流出结果集。和传统 SQL 的 SELECT/GROUP BY 是同一类思维,但阶段可以任意串联组合,表达力更强。

本文核心知识点
  • $match过滤文档,尽量放最前。
  • $group按字段分组聚合。
  • $lookup左连接另一集合。
  • $facet一次产出多组统计。
MongoDB 聚合管道配图:蓝色渐变背景左侧层叠文档卡片流入三层漏斗聚合管道,下方流出柱状图方块,扁平科技插画
文档层层过滤、最后汇成图表,正是聚合管道把明细变成统计的意象。

$match 与 $project:先筛后投影

$match按条件过滤文档,$project决定输出哪些字段、要不要计算新字段。关键经验:把 $match 放管道最前面,尽早缩小数据量,它还能命中索引,性能天差地别;先投影再分组也能减少中间数据。

$group:分组聚合

$group 按 _id 指定的字段分组,用累加器统计每组:$sum 求和、$avg 平均、$max/$min 最值、$push 把字段收集成数组。这是做报表统计最核心的阶段。

db.orders.aggregate([
  { $match: { status: "paid" } },
  { $group: {
      _id: "$city",
      total: { $sum: "$amount" },
      cnt:   { $sum: 1 }
  } }
])

$lookup:集合关联

$lookup相当于 SQL 的左连接:把当前集合的字段和另一个集合关联、把子文档嵌进来。比如订单集合想带上商品详情,不用应用层再查一次,管道里一次 join 完成。