小记:mongodb group聚合
Mongodb的group聚合稍微复制些,它是先选定分组所依据的键,而后mongodb就会将集合依据所选定键值的不同分为不同的若干组,然后可以通过聚合每一组内的文档,产生一个结果文档。准备些测试数据:
> db.test.insert({name:'gongchang', count:25})
> db.test.insert({name:'gongchang', count:63})
> db.test.insert({name:'xz', count:227})
> db.test.insert({name:'xz', count:72})
> db.test.insert({name:'xz', count:22})
> db.test.insert({name:'gongchang', count:125})
> db.test.insert({name:'gongchang', count:613})
> db.test.insert({name:'xz', count:2217})
> db.test.insert({name:'xz', count:721})
> db.test.insert({name:'xz', count:221})
然后计算相同name名称的count的总和:
> db.runCommand({"group" : {
... "ns":"test",//指定要进行分组的集合
... "key": {"name":true},//指定文档分组依据的键值
... "initial":{"count":0},//初始化count的大小
... "$reduce":function(doc, prev){//每次文档都对应一次这个调用,doc为当前文档,prev为累加器文档
... prev.count+=doc.count
... }
... }})
{
"retval" : [
{
"name" : "zs",
"count" : 333
},
{
"name" : "ls",
"count" : 103
},
{
"name" : "gongchang",
"count" : 826
},
{
"name" : "xz",
"count" : 3480
}
],
"count" : 20,
"keys" : 4,
"ok" : 1
}
找出相同name下最大的count值是多:
> db.runCommand({"group" : {
... "ns":"test",
... "key": {"name":true},
... "initial":{"count":0},
... "$reduce":function(doc, prev){
... if(doc.count > prev.count){
... prev.count = doc.count
... }
... }
... }})
{
"retval" : [
{
"name" : "zs",
"count" : 227
},
{
"name" : "ls",
"count" : 72
},
{
"name" : "gongchang",
"count" : 613
},
{
"name" : "xz",
"count" : 2217
}
],
"count" : 20,
"keys" : 4,
"ok" : 1
}
>
页:
[1]