MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:
• 作用在一个或几个集合上;
• 对集合中的数据进行的一系列运算;
• 将这些数据转化为期望的形式;
从效果而言,聚合框架相当于 SQL 查询中的:
• GROUP BY
• LEFT OUTER JOIN
• AS等
整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的
每个管道:
• 接受一系列文档(原始数据);
• 每个步骤对这些文档进行一系列运算;
• 结果文档输出给下一个步骤;
pipeline = [$stage1, $stage2, ...$stageN]; db.<COLLECTION>.aggregate( pipeline, { options } );
常见的stage步骤
步骤 | 作用 | SQL等价运算符 |
$match | 过滤 | WHERE |
$project | 投影 | AS |
$sort | 排序 | ORDER BY |
$group | 分组 | GROUP BY |
$skip/$limit | 结果限制 | SKIP/LIMIT |
$lookup | 左外连接 | LEFT OUTER JOIN |
常见步骤中的运算符
$match | $project | $group |
•$eq/$gt/$gte/$lt/$lte •$and/$or/$not/$in •$geoWithin/$intersect •…… |
•选择需要的或排除不需要的字段 •$map/$reduce/$filter •$range •$multiply/$divide/$substract/$add •$year/$month/$dayOfMonth/$hour/$minute/$second •…… |
•$sum/$avg •$push/$addToSet •$first/$last/$max/$min •…… |
其他功能
步骤 | 作用 | SQL等价运算符 |
$unwind | 展开数组 | N/A |
$graphLookup | 图搜索 | N/A |
$facet/$bucket | 分面搜索 | N/A |
比如展开数据就有妙用,可以将内嵌文档展开为多行数据。
使用示例:
条件过滤步骤 $match
投影步骤 $project
展开数据步骤 $unwind
分组聚合步骤 $group
mongoSQl特有步骤$bucket
$Facet组合$bucket