pymongo的group操作

1 篇文章 0 订阅
1 篇文章 0 订阅

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的,然后第二个元素接收到的第一个元素处理过之后的。

下面是一个例子:
数据集合是:
{
'poiName':'a',
'editStatus':'accept'
}
{
'poiName':'a',
'editStatus':'accept'
}
{
'poiName':'b',
'editStatus':'accept'
}
{
'poiName':'a',
'editStatus':'pending'
}



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)

结果应该是:
[{"poiName":"a","pendingNum":0,"discardNum":0,"acceptNum":2},
{"poiName":"b","pendingNum":1,"discardNum":0,"acceptNum":0}]



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值