■MongoDB聚合查询
明确需求
思考:如何统计数据、如何实现分组统计等?
回答:通过MongoDB聚合查询
概念
聚合查询
顾名思义就是把数据聚起来,然后统计
语法(略复杂
语法
db.集合名称.aggregate([
{管道:{表达式}}
....
])
常用管道
$group 将集合中的文档分组,用于统计结果
$match 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$limit 限制集合数据返回文档数
....
常用表达式
$sum 总和 $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值
...
准备
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})
练习
- 统计男生、女生的总年龄
db.c1.aggregate([
{
$group:{
_id: "$sex",
rs: {$sum: "$age"}
}
}
])
- 统计男生、女生的总人数
db.c1.aggregate([
{
$group:{
_id: "$sex",
rs: {$sum:1}
}
}
])
- 求学生总数和平均年龄
db.c1.aggregate([
{
$group:{
_id: null,
total_num: {$sum:1},
total_avg: {$avg: "$age"}
}
}
])
- 查询男生、女生人数,按人数升序
db.c1.aggregate([
{$group:{_id: "$sex",rs: {$sum: 1}}},
{$sort:{rs: -1}}
])