MongoDB聚合查询基础语法和测试实例

MongoDB聚合查询

语法

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,升序排列

猜你喜欢

转载自blog.csdn.net/qq_43710881/article/details/107846531