■MongoDB聚合查询

明确需求

MongoDB常见的聚合 管道方法 mongo聚合查询_最小值

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

回答:通过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"}
 	}
 }
])

MongoDB常见的聚合 管道方法 mongo聚合查询_最小值_02

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

MongoDB常见的聚合 管道方法 mongo聚合查询_最小值_03

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

MongoDB常见的聚合 管道方法 mongo聚合查询_MongoDB常见的聚合 管道方法_04

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

MongoDB常见的聚合 管道方法 mongo聚合查询_升序_05