MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:
1)作用在一个或者几个集合上;
2)对集合中的数据进行一系列的运算;
3)将这些数据转化为期望的形式;
从效果而言,聚合框架相当于 SQL 查询中的:
1)GROUP BY
2)LEFT OUTER JOIN
3)AS等
管道(Pipeline)和步骤(Stage)
整个聚合运算过程称为管道(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 |
常见步骤中的运算符
$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 •…… |
MQL 常用步骤与 SQL 对比
示例1:
SELECT
FIRST_NAME AS `名`, LAST_NAME AS `姓`
FROM Users
WHERE GENDER = '男'
SKIP 100 LIMIT 20
VS:
db.users.aggregate([
{$match: {gender: ’’男”}},
{$skip: 100},
{$limit: 20},
{$project: {
'名': '$first_name', '姓': '$last_name'
}}
]);
示例2:
SELECT DEPARTMENT, COUNT(NULL) AS EMP_QTY
FROM Users
WHERE GENDER = '女'
GROUP BY DEPARTMENT HAVING COUNT(*) < 10
VS:
db.users.aggregate([
{$match: {gender: '女'}},
{$group: {
_id: '$DEPARTMENT’,
emp_qty: {$sum: 1}
}},
{$match: {emp_qty: {$lt: 10}}}
]);
工具
可以使用Mongo Compass或者Studio 3T等工具帮助完成复杂的聚合查询,而且可以导出成不同编程语言的代码。
「真诚赞赏,手留余香」
请我喝杯咖啡?
使用微信扫描二维码完成支付
