在说 MongoDB 聚合框架之前,我们先了解下关系型数据库中的聚集函数和分组统计,我们常见的SQL五大的聚集函数有如下所示:
可见SQL 中的聚集函数是用来对数据表中的数据进行筛选过滤,然后对过滤后的数据进行一系列的函数运算。
MongoDB 中的聚合框架(Aggregation Framework)和SQL 中的聚集函数一样,它是一个计算框架,作用在一个或几个集合上面,对集合中的数据进行一系列的运算,得出期望的数据。
管道(Pipeline)和步骤(Stage)
MongoDB 中 整个聚合运算的过程称为管道(Pipeline),管道由多个步骤(Stage)组成,每个管道可以接收原始数据(文档),然后对这些文档进行一系列运算,直到输出结果。
聚合运算基本格式
pipeline = [$stage1, $stage2, ...$stageN];
db.<COLLECTION>.aggregate(
pipeline,
{ options }
);
常见关键字
步骤 | 作用 | SQL等价运算符 |
---|---|---|
$match | 过滤 | WHERE |
$project | 投影 | AS |
$sort | 排序 | ORDER BY |
$group | 分组 | GROUP BY |
$skip / $limit | 限制 | SKIP/LIMIT |
$lookup | 左外链接 | LEFT OUTER JOIN |
$unwind | 展开搜索 | N/A |
$graphLookup | 图搜索 | N/A |
$facet / $bucket | 分面搜索 | N/A |
步骤中经常和一下运算符搭配
MQL 与 SQL 对比
MQL 特有步骤 $unwind 将集合中的数组展出来。
MQL 特有步骤 $bucket 区间分组。
按照价钱进行分桶,计算每个桶中的个数。
MQL 特有步骤 $facet ,增加桶的分类,例如电商项目中按照价格购买,或者按照购买人数的多少购买等等。
是不是感觉mongodb 的聚合函数的语法写起来有一定的困难,别忘了,我们还有它的客户端 MongodbCompass 看看它给我们带来了哪些福利。
MongoDBCompass 功能非常强大,来来来,使用起来!如有问题,欢迎留言!