mongodb中collection的數據是這樣的
{ "_id" : ObjectId("55d304e44ac0ed5e1ea834a3"), "update_time" : "2015-08-18 18:27:29", "share_pv" : 0, "topic_id" : "205", "share_ip" : 0, "date" : "2015-08-18", "view_ip" : 2, "view_pv" : 117 }
{ "_id" : ObjectId("55d30c924ac0ed5fb70ef57f"), "update_time" : "2015-08-18 20:29:21", "topic_id" : 205, "date" : "2015-08-18", "topic_title" : "大叔の店鋪", "share_pv" : 0, "share_ip" : 0, "view_ip" : 2, "view_pv" : 235 }
我需要查詢按照topic_id來分組的,每個topic_id的share_pv的總和,share_ip的總和,view_ip的總和,view_pv的總和.
conn = pymongo.Connection()
collection = conn.dbname.collection_name
#match用戶篩選,相當於sql語句中的where后面的表達式
match = {}
match['date'] = {
'$gte' : '2015-08-21', #大於等於2015年8月21日的
'$lte' : '2015-08-23' #小於等於2015年8月23日的
}
#根據什么來分組 相當於sql語句中的group by語句
group = {}
group['_id'] = "$topic_id" #根據topic_id來分組
group['all_view_ip'] = {
'$sum' : '$$view_ip', #對view_ip字段求和
}
group['all_view_pv'] = {
'$sum' : '$view_pv', #對view_pv字段求和
}
group['date'] = {'$addToSet':"$date"}, #date字段添加到返回結果里面去
#對結果進行排序
sort = {
'all_view_ip' : 1, #all_view_ip來自於上面group當中的key,-1和1分別表示倒序和升序
}
collection.aggregate([match, group, sort])
