什么是 MongoDB 聚合框架
MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:
作用在一个或几个集合上;
对集合中的数据进行的一系列运算;
将这些数据转化为期望的形式;
从效果而言,聚合框架相当于 SQL 查询中的:
GROUP BY
LEFT OUTER JOIN
AS等
管道(Pipeline)和步骤(Stage)
整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道:
接受一系列文档(原始数据);
每个步骤对这些文档进行一系列运算;
结果文档输出给下一个步骤;

聚合运算的基本格式
常见步骤
步骤
作用
SQL等价运算符
$match
过滤
WHERE
$project
投影
AS
$sort
排序
ORDER BY
$group
分组
<code>$skip/$limit</code>
结果限制
SKIP/LIMIT
$lookup
左外连接
常见步骤中的运算符
<code>$eq/$gt/$gte/$lt/$lte</code>
选择需要的或排除不需要的字段
<code>$sum/$avg</code>
<code>$and/$or/$not/$in</code>
<code>$map/$reduce/$filter</code>
<code>$push/$addToSet</code>
<code>$geoWithin/$intersect</code>
<code>$range</code>
<code>$first/$last/$max/$min</code>
<code>$multiply/$divide/$substract/$add</code>
<code>$year/$month/$dayOfMonth/$hour/$minute/$second</code>
$unwind
展开数组
N/A
$graphLookup
图搜索
聚合运算的使用场景
聚合查询可以用于OLAP和OLTP场景。例如:
OLTP
OLAP
计算
分析一段时间内的销售总额、均值
计算一段时间内的净利润
分析购买人的年龄分布
分析学生成绩分布
统计员工绩效
MQL 常用步骤与 SQL 对比
MQL 特有步骤 $unwind
<code>$unwind</code>指定字段进行子文档展开,其他字段不动
MQL 特有步骤 $bucket
<code>$bucket</code>指定字段按指定区间进行分组统计
MQL 特有步骤 $facet
<code>$facet</code>指定多个字段分别<code>$bucket</code>分组统计