python爬虫(5)——Mongo聚合函数
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
一、管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
**
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
二、实际应用
在这里,我们主要使用它的这四个操作:
1、首先看我们的数据库首先是这样的
pipeline2 = [
{'$match' : {'time' : '2016-07-19'}},
{'$group':{'_id':'$type','counts':{'$sum':1}}},
{'$sort' :{'counts': -1}},
{'$limit':20}
]
#记住这里的pipeline是一个数组;
$match:输入的就是我们的筛选条件;
$group:输入的就是我们的对数据库中某一项数据进行统计,比如说上面我们统计了type这一项数据的总和是多少;
$sort:顾名思义就是对数据进行排序,他参考的标准就是group中的值;1为升序,-1为降序;
limit:限制MongoDB聚合管道返回的文档数;
然后我们来运行看一下:
for i in ganji_info.aggregate(pipeline2): #ganji_info是我们数据库中的一张表;
print(i)
结果是:
{‘_id’: ‘凳子’, ‘counts’: 6}
{‘_id’: ‘冰柜’, ‘counts’: 2}
{‘_id’: ‘鱼缸’, ‘counts’: 2}
{‘_id’: ‘电视机’, ‘counts’: 2}
{‘_id’: ‘文件柜/档案柜’, ‘counts’: 2}
{‘_id’: ‘餐桌’, ‘counts’: 1}
{‘_id’: ‘门窗’, ‘counts’: 1}
{‘_id’: ‘餐椅’, ‘counts’: 1}
{‘_id’: ‘冰箱’, ‘counts’: 1}
{‘_id’: ‘其他架子’, ‘counts’: 1}
{‘_id’: ‘充气床’, ‘counts’: 1}
{‘_id’: ‘电视柜’, ‘counts’: 1}
{‘_id’: ‘其他家具转让’, ‘counts’: 1}
{‘_id’: ‘沙发’, ‘counts’: 1}
{‘_id’: ‘空调’, ‘counts’: 1}
{‘_id’: ‘单人床’, ‘counts’: 1}
这个函数是我们通过pymongo中的方法,实现了对数据库的操作,所以你事先要先安装pymongo库;