小记: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
}
>

posted @ 2012-06-19 15:19  Linux、Mongo、Php、Shell、Python、C  阅读(392)  评论(0编辑  收藏  举报