①$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"}}}]);
⑪