发表于 2015-7-9 12:39:33

小记: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]
查看完整版本: 小记:mongodb group聚合