您的位置:首页 > 编程语言 > Go语言

pymongo的group操作

2013-12-29 22:45 155 查看
mongodb的group操作是将某个键值作为map的分组依据,然后每个分组的数据再通过reduce函数依次处理。

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

下面是函数原型:

group(key, condition, initial, reduce, finalize=None)

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

condition是条件,和find的一样

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

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

function(objprev)

group先按照key进行分组,然后每个分组,对分组内的元素依次调用reduce函数,

obj是当前元素,prev是上一个元素处理过的初始化的那个对象。

第一个元素接受到的obj就是initial的,然后第二个元素接收到的第一个元素处理过之后的。

下面是一个例子:

数据集合是:

[python] view
plaincopy

{  

'poiName':'a',  

'editStatus':'accept'  

}  

{  

'poiName':'a',  

'editStatus':'accept'  

}  

{  

'poiName':'b',  

'editStatus':'accept'  

}  

{  

'poiName':'a',  

'editStatus':'pending'  

}  

[python] view
plaincopy

func = ''''' 

                function(obj, prev) 

                { 

                    if(obj.editStatus == 'pending') 

                        prev.pendingNum++; 

                    else if (obj.editStatus == 'discard') 

                        prev.discardNum++; 

                    else if (obj.editStatus == 'accept') 

                        prev.acceptNum++; 

                    prev.shareNum++; 

                } 

               '''  

 ret = self._collection.group(['poiName'],None,{"pendingNum":0,"discardNum":0,"acceptNum":0},func)  

结果应该是:

[python] view
plaincopy

[{"poiName":"a","pendingNum":0,"discardNum":0,"acceptNum":2},  

{"poiName":"b","pendingNum":1,"discardNum":0,"acceptNum":0}]
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: