Skip to content
Have a clear structure

聚合查询

语法:

bash
db.集合名称.aggregate([
	{管道:{表达式}}
	....
])

常用管道:

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

常用表达式:

  • $sum 总和 $sum:1 同 count 表示统计
  • $avg 平均
  • $min 最小值
  • $max 最大值

准备:

bash
db.c3.insert({_id:1,name:"a",sex:1,age:1})
db.c3.insert({_id:2,name:"a",sex:1,age:2})
db.c3.insert({_id:3,name:"b",sex:1,age:3})
db.c3.insert({_id:4,name:"c",sex:2,age:4})
db.c3.insert({_id:5,name:"d",sex:2,age:5})

操作:

男女生的总年龄

#_id 必须加,后跟指定列

#rew 求和 返回结果数

bash
db.c3.aggregate([
	{
		$group:{
			_id:"$sex",
			res:{$sum:"$sex"}
	}
	}
])

求男女总人数

bash
db.c3.aggregate([
	{
		$group:{
			_id:"$sex",
			res:{$sum:1}
	}
	}
])

求学生总数和平均年龄

bash
db.c3.aggregate([
	{
		$group:{
			_id:null,
			res:{$sum:1},
      total_avg:{$avg:"$age"}
	}
	}
])

查询男生女生人数,升序排序

bash
db.c3.aggregate([
	{$group:{	_id:"$sex",res:{$sum:1}}},
	{$sort:{res:1}}
])