语法
db.集合名.aggregate([
{管道:{表达式}}
])
常用管道
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只输出符合条件的数据
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
...
更多管道参考官方文档https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
常用表达式
$sum 求和 $sum:1同count表示求和
$avg 平均
$min 最小值
$max 最大值
...
更多表达式参考官方文档
https://docs.mongodb.com/manual/reference/operator/update/
测试数据
use test4
db.c1.insert({_id:1,name:'a',sex:1,age:1})
db.c1.insert({_id:2,name:'b',sex:2,age:2})
db.c1.insert({_id:3,name:'c',sex:2,age:3})
db.c1.insert({_id:4,name:'d',sex:1,age:4})
db.c1.insert({_id:5,name:'e',sex:1,age:5})
练习
1.统计男生、女生的总年龄
db.c1.aggregate([
{
$group:{
_id:"$sex",
rs:{$sum:"$age"}
}
}
])
结果: 男生年龄总和15 女生年龄总和5
2.统计男生、女生的总人数
db.c1.aggregate([
{
$group:{
_id:"$sex",
rs:{$sum:1}
}
}
])
结果:男生3人,女生2人
3.求学生总数和平均年龄
db.c1.aggregate([
{
$group:{
_id:null,
total_num:{$sum:1},
avg_num:{$avg:"$age"}
}
}
])
重点:不需要分组的时候,_id设置为null
结果:总人数5,平均年龄3
4.查询男生、女生人数,按人数排序
db.c1.aggregate([
{
$group:{
_id:"$sex",
rs:{$sum:1}
}
},
{
$sort:{rs:1}
}
])
重点:写两个管道
结果:男生3,女生2,升序排列