聚合框架
1. 是一个计算框架
管道(Pipeline)和步骤(Stage)
1. 管道和步骤
- 整个聚合运算的过程称为管道,它是由多个步骤组成的
- 每个管道:
- 接受一系列文档(原始数据)
- 每个步骤对这些文档进行一系列运算
- 结果文档输出给下一个步骤
2. 聚合运算的基本格式
pipeline = [$stage1(JSON格式), $stage2, ..., $stageN];
db.collection.aggregate(
pipline,
{options}
)
3. 常见步骤
4. 常见步骤里的运算符
5. 一些不常用的步骤
聚合运算的使用场景
1. OLAP和OLTP场景
2. MQL常用步骤与SQL对比
案例1:
案例2:
MQL特有步骤$unwind,用于展开数组
MQL特有步骤$bucket,用于分组。电商、产品统计场景十分合适
- MQL特有步骤$facet,将bucket组合起来。适合多维度指标的统计
- 一个案例:查看2019年第一季度已完成订单订单总金额和订单总数
db.getCollection('orders').aggregate([
// 步骤1:匹配条件
{
$match: {
status: "completed",
orderDate: {
$gte: ISODate("2019-01-01"),
$lt: ISODate("2019-04-01")
}
}
},
// 步骤2:聚合订单总金额、运费、总数量
{
$group: {
_id: null,
total: {$sum: "$total"},
shippingFee: {$sum: "$shippingFee"},
count: {$sum: 1}
}
},
// 步骤3:计算总金额
{
$project: {
grandTotal: {$add: ["$total", "$shippingFee"]},
count: 1,
_id: 0
}
}
])
// 结果
// {"count": ..., "grandTotal": ...(如:NumberDecimal("3243243424.33"))}