订单统计:按天/按商品/按地区多维分析。用 MySQL 需要复杂的 GROUP BY 和多表 JOIN,MongoDB 聚合管道一行搞定。

一、聚合管道简介

  • 1.1 管道的概念——文档流经多个阶段,逐步处理
  • 1.2 常用阶段——$match / $group / $sort / $project / $lookup
  • 1.3 与传统 SQL 的对应关系

二、$match——过滤

  • 2.1 等价于 WHERE
  • 2.2 尽量放在管道最前面——减少后续处理量
  • 2.3 支持索引

三、$group——分组聚合

  • 3.1 等价于 GROUP BY
  • 3.2 聚合操作符——$sum / $avg / $min / $max / $push
  • 3.3 按多字段分组——_id: { date: "$date", status: "$status" }

四、$lookup——关联查询

  • 4.1 等价于 LEFT JOIN
  • 4.2 语法——from / localField / foreignField / as
  • 4.3 性能注意——$lookup 开销大

五、$project & $sort

  • 5.1 $project——选择/排除字段、计算新字段
  • 5.2 $sort——排序

六、电商订单统计完整案例

  • 6.1 需求——按日统计各状态的订单金额
  • 6.2 完整管道代码
  • 6.3 与 MySQL 聚合的性能对比

七、聚合管道优化

  • 7.1 allowDiskUse——数据量大时
  • 7.2 索引利用——$match$sort 使用索引
  • 7.3 管道顺序优化——$match$sort$group

八、总结

  • MongoDB 聚合管道 = SQL 的 GROUP BY + JOIN + 子查询
  • 适用场景——非结构化数据的灵活分析