MongoDB 的聚合

MongoDB 的聚合

  • 对数据文档进行整理统计
1、创建聚合
  • 函数:db.collectionName.aggregate()
  • 功能:聚合函数,配合聚合条件进行数据整理
2、$group聚合操作符(分组)
操作符说明
$sum求每组文档的个数,或求和
$avg求每组文档的平均数
$min求每组文档的最小值
$max求每组文档的最大值
$first求每组文档的第一个域的指定值
$max求每组文档的最后一个域的指定值
db.py.aggregate({$group:{_id:"$model",total:{$sum:1}}})  // 按model域分组并统计文档个数
//   $group  分组
//   _id:"$model"  按照model域进行聚合分组,固定写法,$表示取model域的值,必须用引号
//   total:  统计结果后的新域名为total
//   {$sum:1}   $sum:分组操作符
//   $sum:1  分组后,统计文档个数,乘以1,$sum:10,则统计文档个数后乘以10
{
	"_id" : "mate7",
	"total" : 3   // model 域值为mate7的文档有3个
}
	
db.py.aggregate({$group:{_id:"$model",total:{$sum:"$price"}}})  // 按model域分组按price域进行数值求和
{
	"_id" : "mate7",
	"total" : 12000   // model 域值为mate7的price之和为12000
}

db.py.aggregate({$group:{_id:"$model",total:{$avg:"$price"}}}) // 按model域分组按price域进行数值求平均数
{
	"_id" : "mate7",
	"total" : 4000   // model 域值为mate7的price平均数为12000
}
3、$project聚合操作符(修饰文档的显示结构)
db.py.aggregate({$project:{_id:0,model:1,price:1}})
// 查询结果不显示_id域,只显示model和price域,同find函数的field参数
{
	"model" : "mate 20",
	"price" : 5500
}

db.py.aggregate({$project:{_id:0,MODEL:"$model",PRICE:"$price"}})
// 查询结果不显示_id域,只显示model和price域,并且显示的域名可自定义,$表示取model域的值,必须用引号
{
	"MODEL" : "mate 8",
	"PRICE" : 3500
},
4、$match聚合操作符(过滤数据)
db.student.aggregate({$match:{stu_ID:"2019023105"}})
// 查找stu_ID为2019023105的文档,相当于find函数的query参数

db.student.aggregate({$match:{stu_age:{$lt:18}}})
// 查找stu_age小于18的文档
5、$limit聚合操作符(显示前几条数据)
db.student.aggregate([{$match:{stu_age:{$lt:20}}},{$limit:2}])
// 查找stu_age小于20的文档,并显示前两条
6、$skip聚合操作符(跳过前几条数据显示)
db.student.aggregate([{$match:{stu_age:{$lt:20}}},{$skip:1}])
// 查找stu_age小于20的文档,并跳过第一条文档显示
7、$sort聚合操作符(排序)
db.student.aggregate({$sort:{stu_age:1}})
// 按照stu_age的值升序排序
8、聚合管道
  • 前一个聚合操作的结果给后一个聚合操作执行
  • 格式:将多个聚合操作放在一个中括号内
db.student.aggregate([
						{$match:{stu_sex:"w"}}, // 过滤
						{$sort:{stu_age:1}},    // 排序
						{$limit:2}				// 显示
					])
// 查找女同学年纪最小的两位
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值