Python爬虫实战笔记_3 大作业mongo进阶查询

mongo pipeline 的应用
  • '$match' 对应WHERE子句
    当数据表中address字段为一个列表时,如['a' , 'b' , 'c'], 想要匹配其中的第二个值'b', pipeline写成� {'$match': {'address': 'b' }} 也能达到预期效果
  • '$group' 对应GROUP BY子句
  • pipeline 中定义的筛选条件是顺序执行的,如果调换{'$sort'} 跟 {'$limit'} 的位置,就会发现结果不对了
pipeline = [
        {'$match': {'address': {'$all': [areas[0]]}}},
        {'$group': {'_id': {'$slice': ['$category', 0, 1]}, 'counts': {'$sum': 1}}},
        {'$sort': {'counts': -1}},
        {'$limit': 3}
    ]
Source code
# 由于数据太少了,去掉了发贴时间的筛选条件
def gen_data():
    pipeline = [
        {'$match': {'address': {'$all': [areas[0]]}}},
        {'$group': {'_id': {'$slice': ['$category', 0, 1]}, 'counts': {'$sum': 1}}},
        {'$sort': {'counts': -1}},
        {'$limit': 3}
    ]
    for i in tinfo.aggregate(pipeline):
        item = {
                'name': i['_id'][0],
                'data': [i['counts']],
                'type': 'column'
            }
        yield item
运行结果
Python爬虫实战笔记_3 大作业mongo进阶查询_第1张图片
Screen Shot 2016-07-10 at 9.12.26 AM.png

你可能感兴趣的:(Python爬虫实战笔记_3 大作业mongo进阶查询)