mongo pipeline 的應用
- '$match' 對應WHERE子句
當數(shù)據(jù)表中address字段為一個列表時,如['a' , 'b' , 'c'], 想要匹配其中的第二個值'b', pipeline寫成? {'$match': {'address': 'b' }} 也能達到預期效果 - '$group' 對應GROUP BY子句
- pipeline 中定義的篩選條件是順序執(zhí)行的,如果調換{'$sort'} 跟 {'$limit'} 的位置,就會發(fā)現(xiàn)結果不對了
pipeline = [
{'$match': {'address': {'$all': [areas[0]]}}},
{'$group': {'_id': {'$slice': ['$category', 0, 1]}, 'counts': {'$sum': 1}}},
{'$sort': {'counts': -1}},
{'$limit': 3}
]
Source code
# 由于數(shù)據(jù)太少了,去掉了發(fā)貼時間的篩選條件
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