pymongo的group操作

mongodb的group操作是将某个键值作为map的分组依据,然后每个分组的数据再通过reduce函数依次处理。

其实group操作就是mapreduce的一个子集。

下面是函数原型:

group(keyconditioninitialreducefinalize=None)


key是需要分组的键,可以是list

condition是条件,和find的一样

initial是初始的一个对象,比如你要统计每个分组的元素个数,你可以传递一个{'sum':0}

reduce是一个string,内容是js的函数,形式是:

function(obj, prev)
group先按照key进行分组,然后每个分组,对分组内的元素依次调用reduce函数,
obj是当前元素,prev是上一个元素处理过的初始化的那个对象。
第一个元素接受到的obj就是initial的,然后第二个元素接收到的第一个元素处理过之后的。

下面是一个例子:
数据集合是:
[python]  view plain copy
  1. {  
  2. 'poiName':'a',  
  3. 'editStatus':'accept'  
  4. }  
  5. {  
  6. 'poiName':'a',  
  7. 'editStatus':'accept'  
  8. }  
  9. {  
  10. 'poiName':'b',  
  11. 'editStatus':'accept'  
  12. }  
  13. {  
  14. 'poiName':'a',  
  15. 'editStatus':'pending'  
  16. }  



[python]  view plain copy
  1. func = ''''' 
  2.                 function(obj, prev) 
  3.                 { 
  4.                     if(obj.editStatus == 'pending') 
  5.                         prev.pendingNum++; 
  6.                     else if (obj.editStatus == 'discard') 
  7.                         prev.discardNum++; 
  8.                     else if (obj.editStatus == 'accept') 
  9.                         prev.acceptNum++; 
  10.                     prev.shareNum++; 
  11.                 } 
  12.                '''  
  13.  ret = self._collection.group(['poiName'],None,{"pendingNum":0,"discardNum":0,"acceptNum":0},func)  

结果应该是:
[python]  view plain copy
  1. [{"poiName":"a","pendingNum":0,"discardNum":0,"acceptNum":2},  
  2. {"poiName":"b","pendingNum":1,"discardNum":0,"acceptNum":0}]  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值