第17章:MongoDB-聚合操作--聚合管道--$group

①$group

作用:将集合中的文档进行分组,可用于统计结果。

 

例如:

db.scores.aggregate({“$group”:{“_id”:“$studentId”}}); 或者是

db.scores.aggregate({"$group":{"_id":{"sid":"$studentId","score":"$score"}}});

 

$group支持的操作符

1:$sum:value :对于每个文档,将value与计算结果相加

2:$avg:value :返回每个分组的平均值

3:$max:expr :返回分组内的最大值

4:$min:expr :返回分组内的最小值

5:$first:expr :返回分组的第一个值,忽略其他的值,一般只有排序后,明确知道数据顺序的时候,这个操作才有意义

6:$last:expr :与上面一个相反,返回分组的最后一个值

7:$addToSet:expr :如果当前数组中不包含expr,那就将它加入到数组中

8:$push:expr:把expr加入到数组中

 

范例:实现聚合查询的功能——求出每个职位的雇员人数
db.emps.aggregate([{"$group":{"_id":"$job","job_count":{"$sum":1}}}]);
范例:求出每个职位的总工资
db.emps.aggregate([{"$group":{"_id":"$job","job_sal":{"$sum":"$salary"}}}]);

 

范例:计算出每个职位的平均工资
db.emps.aggregate([{"$group":{"_id":"$job","job_avg":{"$avg":"$salary"}}}]);
范例:求出最高与最低工资
db.emps.aggregate([{"$group":{"_id":"$job","max_sal":{"$max":"$salary"},"min_sal":{"$min":"$salary"}}}]);
范例:计算出每个职位的工资数据(数组显示)
db.emps.aggregate([{"$group":{"_id":"$job","sal_data":{"$push":"$salary"}}}]);
范例:求出每个职位的人员
db.emps.aggregate([{"$group":{"_id":"$job","sal_data":{"$push":"$name"}}}]);
使用“$push”的确可以将数据变为数组进行保存,但是有一个问题出现了,重复的内容也会进行保存,那么在MongoDB里面提供有取消重复的设置。

 

范例:取消重复的数据
db.emps.aggregate([{"$group":{"_id":"$job","sal_data":{"$addToSet":"$name"}}}]);

 

范例:保存第一个内容
db.emps.aggregate([{"$group":{"_id":"$job","sal_data":{"$first":"$name"}}}]);

 

范例:保存最后一个内容
db.emps.aggregate([{"$group":{"_id":"$job","sal_data":{"$last":"$name"}}}]);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Lucky-stars/p/10555249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值