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

转载于:https://www.cnblogs.com/gongchang/archive/2012/06/19/2554826.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值