pymongo的聚合函数aggregate的用法,用于统计
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])