MongoDB聚合查询

明确需求

思考:如何统计数据、如何实现分组统计等

回答:通过MongoDB聚合查询

概念

聚合查询:顾名思义就是把数据聚起来,然后统计

语法

语法:

1
2
3
4
db.集合名称.aggregate([
{管道:{表达式}}
...
])

常用管道

1
2
3
4
5
6
$group	将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
.....

常用表达式

1
2
3
4
5
$sum	总和	$sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值
...

准备

1
2
3
4
5
6
use test4
db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"a",sex:1,age:2})
db.c1.insert({_id:3,name:"b",sex:2,age:3})
db.c1.insert({_id:4,name:"c",sex:2,age:4})
db.c1.insert({_id:5,name:"d",sex:2,age:5})

练习

  • 统计男生、女生的总年龄
1
2
3
4
5
6
7
8
db.c1.aggregate([
{
$group:{
_id:"$sex",
rs:{$sum:"$age"}
}
}
])

  • 统计男生、女生的总人数
1
2
3
4
5
6
7
8
db.c1.aggregate([
{
$group:{
_id:"$sex",
rs:{$sum:1}
}
}
])

  • 求学生总数和平均年龄
1
2
3
4
5
6
7
8
9
db.c1.aggregate([
{
$group:{
_id:null,
total_num:{$sum:1},
total_avg:{$avg:"$age"}
}
}
])

image-20210617153743216

  • 查询男生、女生人数,按人数升序
1
2
3
4
db.c1.aggregate([
{$group:{_id:"$sex",sum:{$sum:1},}},
{$sort:{sum:1}}
])

image-20210617154339848


MongoDB聚合查询
https://blog-theta-ten.vercel.app/2021/06/17/MongoDB聚合查询/
作者
Chen
发布于
2021年6月17日
许可协议