聚合统计

聚合操作aggregate是使用管道将来自多个文档的值组合在一起,并通过对分组数据执行各种操作以返回计算后的结果,如统计平均值、求和

管道由多个阶段组成,每个阶段在文档沿着管道传递时都会对其进行处理。文档按顺序通过各个阶段。第一个阶段应该用$match把需要用到的数据先提取出来再统计。

管道操作符

$match

过滤数据,只输出符合条件的文档。可用各种查询操作

$limit

限制管道返回的文档数

$skip

跳过指定数量的文档,并返回余下的文档

$unwind

将包含数组的字段拆分成多个文档,每个文档只包含一个数组元素

$group

将文档分组,用于统计结果。_id表示分组的依据,必填。_id: null 表示全选,即把所用文档分为一组。用$来选定字段,$$ROOT表示所有内容。

$sort

将结果进行排序后输出

统计操作符

$sum

求和, $sum: 1 表示以一倍计数

$avg

求平均值

$min

求最小值

$max

求最大值

例子

求每个客户已支付的订单总额。注:一个客户存在多个订单

[{ $match: { z: { $exists: true }} }, { $group: { _id: "$auth", total: { $sum: "$total" } } }]

求南山区各辅导站人数

[{ $match: {"x.区属": "南山区"} }, { $group: { _id: "$x.辅导站", count: { $sum: 1 }}}]

求学生总数和平均年龄

[{ $match: {"x.type": "学生"} }, { $group: { _id: null, count: { $sum: 1 }, avg_age: { $avg: "$x.age" }}}]

财务系统中根据凭证分录中的借贷金额统计各科目收入总额和支出总额

[{ $match: { type: "凭证"} }, { $unwind: { path: "$x.arr" } }, { $group: {_id: "$x.arr.科目", 收入总额: { $sum: "$x.arr.借" }, 支出总额: { $sum: "$x.arr.贷" } }]

与SQL类比

SQL

Mongo

where

$match

group by

$group

having

$match

select

$project

order by

$sort

limit 

$limit

sum()

$sum

聚合可以非常复杂,详情请参考官网文档

由众触低代码平台生成和驱动