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