mongodb之group方法

mongodb的group跟其他sql的group一样,对数据表进行分组计算;它使用JavaScript,在性能上受到一些限制。大多数情况下,$ group在Aggregation Pipeline提供了一种具有较少的限制适用的替代。可以通过指定的键的集合中的文档和执行简单的聚合函数。在2.2版本中,返回的数组可以包含最多20000个元素;即最多20000个独特的分组。

缺点:group和distinct一个限制不能返回超过16M的数据;

优点:通常情况下,处理数据比map_reduce快;

例子:

db.TotalUserAverageDailyLengthRound_temp.group(
     {key: {"day_time": true,"discount": true}, //group 分组key值
      //keyf等价于key
     // keyf: function (doc){return {'month':doc.day_time,discount:doc.discount};},
      initial:{countUser:0,totalDuration:0},//初始化文档变量
      reduce:function(doc,aggregator){//数据处理结果方法体
                         aggregator.countUser+=1;
                         aggregator.totalDuration+=doc.duration; 
              },
      finalize:function(doc){ //终结器
          doc.totalDuration=doc.totalDuration/1000; 
         }});

各参数列表说明:

group函数参数说明
名称描述
key作为分组的key,等价于sql中group by a,b
initial初始化聚合结果文档变量,为空时自动为每列提供初始变量。
reduce一个聚合函数操作文档的分组操作期间。这些函数可以返回一个sum或count。该函数接受两个参数:当前文档和这个群体聚集的结果文档
keyf可选。替代的key 字段。指定一个函数创建一个“key object”作为分组的key。使用keyf而是通过group by领域而不是现有的文档域键组。
cond过滤条件
finalize在db.collection.group()返回最终结果之前,此功能可以修改的结果文档或替换的结果文档作为一个整体。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值