聚合表达式
常用的几个聚合表达式:
表达式 | 用法 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
$min | 获取集合中所有文档对应值的最小值 |
$max | 获取集合中所有文档对应值的最大值 |
$push | 在结果文档中插入值到一个数组中 |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本 |
$first | 根据资源文档的排序获取第一个文档数据 |
$last | 根据资源文档的排序获取最后一个文档数据 |
如何对文档进行统计
在数据库mydb2
有集合educoder
内容如下:
_id | course | author | tags | learning_num |
---|---|---|---|---|
1 | Python表达式问题求解实训 | 李暾 | Python基础,求解 | 1882 |
2 | Java语言之基本语法 | 余跃 | Java基础,语法 | 814 |
3 | Python面向对象编程实训 | 李暾 | Python基础,面向对象 | 143 |
4 | Android综合实训之物联网移动应用开发(1) | prophet5 | Android,物联网,移动开发 | 207 |
- 现在我们通过
aggregate()
方法来获取每个作者拥有的实训数量,命名为:num_course
:
db.educoder.aggregate([{$group:{_id:'$author',num_course:{$sum:1}}}])
查询结果如下:
命令解析:
- 先通过聚合管道操作符
$group
将author
字段数据分组; $sum:1
的含义:如果前面的情况出现一次,就加1
,如果后面为$sum:2
,那么前面条件每满足一次就加2
;- 通过
aggregate()
方法来获取每个作者的实训学习总人数learning_sum
:
db.educoder.aggregate([
{
$group:{_id:'$author',learning_sum:{$sum:'$learning_num'}}
}
])
查询结果如下: