聚合运算的基本格式:
pipline=[$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 |
聚合查询可以用于OLAP(分析一段时间内的销售总额、均值;计算一段时间内的净利润;分析购买人的年龄分布;分析学生成绩分布;统计员工绩效)和OLTP(计算)
聚合实验一:总销量,计算到目前为止所有订单的总销售额。(数据再上一章导入)
> use mock
switched to db mock
> show tables
orders
> db.orders.aggregate([{$group:{_id:null,total:{$sum:"$total"}}}])
{ "_id" : null, "total" : NumberDecimal("44019609") }
订单金额汇总,查询2019年第一季度(1月1日~3月31日)已完成订单(completed)的订单总金额和订单总数:
db.orders.aggregate([
//步骤1:匹配条件
{$match:{status:"completed",orderDate:{$gte:ISODate("2019-01-01"),$lt:ISODate("2019-04-01")}}},
//步骤二:聚合订单总金额,总运费,总数量
{$group:{_id:null,total:{$sum:"$total"},shippingFee:{$sum:"$shippingFee"},count:{$sum:1}}},
//计算总金额
{$project:{grandTotal:{$add:["$total","$shippingFee"]},count:1,_id:0}}
])
##查询结果
{ "count" : 5875, "grandTotal" : NumberDecimal("2636376.00") }