aggregate运用

测试环境:192.168.1.55

mongo 192.168.1.55:30001
show dbs
use gwgps

测试目标,求出两个班的总数,人数,平均分数等。

1. 数据准备
db.person1.insert({'class':1,'name':'n1',age:5,score:90,nation:'汉'})
db.person1.insert({'class':1,'name':'n2',age:6,score:92,nation:'汉'})
db.person1.insert({'class':1,'name':'n3',age:5,score:92,nation:'苗'})
db.person1.insert({'class':1,'name':'n4',age:8,score:96,nation:'藏'})
db.person1.insert({'class':1,'name':'n5',age:8,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n6',age:9,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n7',age:4,score:91,nation:'藏'})
db.person1.insert({'class':1,'name':'n8',age:8,score:96,nation:'苗'})
db.person1.insert({'class':2,'name':'n9',age:9,score:95,nation:'苗'})
db.person1.insert({'class':2,'name':'n10',age:9,score:96,nation:'藏'})
db.person1.insert({'class':2,'name':'n11',age:9,score:92,nation:'苗'})
db.person1.insert({'class':2,'name':'n12',age:8,score:91,nation:'汉'})
db.person1.insert({'class':2,'name':'n13',age:7,score:99,nation:'汉'})
db.person1.insert({'class':2,'name':'n14',age:7,score:98,nation:'汉'})
db.person1.insert({'class':2,'name':'n15',age:2,score:99,nation:'内蒙'})

2. 查询所有人数
(_id:为分组字段,如果不进行分组,则用null,如果有,填写分组字段)
db.person1.aggregate( [ {
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )

结果:{ "_id" : null, "count" : 15 }

3.查询总分
db.person1.aggregate( [ {
$group: {
_id: null,
total: { $sum: "$score" }
}
}
] )
结果:{ "_id" : null, "total" : 1423 }

4.根据班级分组,求出每个班的总分,并对分数进行排序
(注:分组可以一个字段,也可以多个字段)
db.person1.aggregate( [ {
$group: {
_id: "$class",
total: { $sum: "$score" }
}
}, { $sort: { total: 1 } }
] )

结果: { "_id" : 2, "total" : 670 } { "_id" : 1, "total" : 753 }

5.对班级和年龄分组,求出不同班级,年龄层次的总分,并对分数排序
db.person1.aggregate( [ {
$group: {
_id: {
class: "$class",
age:"$age" 
},
total: { $sum: "$score" }
}
}
] )
结果: { "_id" : { "class" : 2, "age" : 8 }, "total" : 91 } { "_id" : { "class" : 2, "age" : 2 }, "total" : 99 } { "_id" : { "class" : 1, "age" : 4 }, "total" : 91 } { "_id" : { "class" : 1, "age" : 9 }, "total" : 98 } { "_id" : { "class" : 2, "age" : 9 }, "total" : 283 } { "_id" : { "class" : 1, "age" : 8 }, "total" : 290 } { "_id" : { "class" : 2, "age" : 7 }, "total" : 197 } { "_id" : { "class" : 1, "age" : 6 }, "total" : 92 } { "_id" : { "class" : 1, "age" : 5 }, "total" : 182 }

6.首先按照班级分组,然后求出人数大于7的班级名和学生具体人数
db.person1.aggregate( [ {
$group: {
_id: "$class",
count: { $sum: 1 }
}
}, { $match: { count: { $gt: 7 } } }
] )
结果: { "_id" : 1, "count" : 8 }

7.求出经过过滤某个指定条件(名族:汉)后的结果数据,对结果数据进行分组计算
db.person1.aggregate( [ { $match: { nation: '汉' } }, {
$group: {
_id: "$class",
total: { $sum: "$score" }
}
}
] )
结果: { "_id" : 2, "total" : 288 } { "_id" : 1, "total" : 378 }

注:其他功能待定。

原文地址:https://www.cnblogs.com/myibm/p/5939366.html