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
运行结果
Screen Shot 2016-07-10 at 9.12.26 AM.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容