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(obj, prev)
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}]
其实group操作就是mapreduce的一个子集。
下面是函数原型:
group(key, condition, initial, reduce, finalize=None)
key是需要分组的键,可以是list
condition是条件,和find的一样
initial是初始的一个对象,比如你要统计每个分组的元素个数,你可以传递一个{'sum':0}
reduce是一个string,内容是js的函数,形式是:
function(obj, prev)
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}]
相关文章推荐
- pymongo的group操作
- hive GroupBy操作(翻译自Hive wiki)
- 3.3 Spark RDD 键值转换操作4-cogroup、join
- Spark算子:RDD键值转换操作(3)–groupByKey、reduceByKey、reduceByKeyLocally
- 7.2 Transforming 变换操作 - Buffer/Window/Map/FlatMap/GroupBy/Scan
- 在Python中使用pymongo操作mongodb
- 深入理解groupByKey、reduceByKey区别——本质就是一个local machine的reduce操作
- SPGroup 和SPUser的常用操作
- pymongo 查询排序操作(参数与函数调用查询对比)
- [Linux]用户(user)和用户组(group)管理与操作教程
- pymongo的一些操作
- Linux用户(user)和用户组(group)的日常管理与操作教程概述
- 【FastDev4Android框架开发】神器ViewDragHelper完全解析,妈妈再也不担心我自定义ViewGroup滑动View操作啦~(三十三)
- Ranger Restful API操作用户user和群组group接口
- LinQ to Object --- 有关于Dictionary、SQL(LEFT OUTER JOIN \ Group OrderBy Sum) 操作
- naive date(time) 和aware date(time)的区别 及 pymongo操作dateime的注意事项
- linux用户组、/etc/group文件及账户相关操作命令
- pymongo group的用法
- MongoDB学习笔记——聚合操作之group,distinct,count
- Linq的Group和Join操作