聚合操作
对文档的筛选结果进程整理统计
db.collection.aggregate()
功能:完成聚合操作
参数:聚合条件 ----> 聚合操作符
聚合操作符
$group 分组聚合 需要配合具体的分组选项
$sum 求和
db.class1.aggregate({$group:{_id:'$gender', num:{$sum:1}}})
分组 按照gender值统计 统计结果,求和每有一个加1
统计所有男生和女生的年龄之和
db.class1.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}})
$avg 平均值
求男生 女生年龄的平均数
db.class1.aggregate({$group:{_id:'$gender',num:{$avg:'$age'}}})
$max 求最大值
求男生女生的年龄最大值
db.class1.aggregate({$group:{_id:'$gender',num:{$max:'$age'}}})
$min 求最小值
求男生女生的年龄最小值
db.class1.aggregate({$group:{_id:'$gender',num:{$min:'$age'}}})
$project 修改文档的显示效果
$project值的用法同find()的field参数相同
db.class1.aggregate({$project:{_id:0,name:1,age:1}})
自定义显示的域名,但只是显示而已,真实的却没有改变。
db.class1.aggregate({$project:{_id:0,Name:'$name',Age:'$age'}})
$match 过滤想要的数据
过滤年龄大于30的数据,$match值的写法同query
db.class1.aggregate({$match:{age:{$gt:30}}})
$limit 显示前n个文档
db.class1.aggregate({$limit:n})
$skip 跳过n条文档显示
db.class1.aggregate({$skip:n})
$sort 排序
按照年龄排序
db.class1.aggregate({$sort:{age:1}})
聚合管道
定义:将前一个聚合操作产生的结果,交给后一个聚合操作继续使用
语法:db.collection.aggregate([{聚合1},{聚合2},{}...])
例子:
db.class1.aggregate([{$match:{gender:'m'}},{$sort:{age:1}},{$project:{_id:0}}])
选出所有的男生,在按年龄升序排序,且不显示_id