MongoDB 聚合管道实践
订单统计:按天/按商品/按地区多维分析。用 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 + 子查询
- 适用场景——非结构化数据的灵活分析
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!