这是我对pymongo聚合的查询:
db.connection_log.aggregate([
{ '$match': {
'login_time': {'$gte': datetime.datetime(2014, 5, 30, 6, 57)}
}},
{ '$group': {
'_id': {
'username': '$username',
'ras_id': '$ras_id',
'user_id': '$user_id'
},
'total': { '$sum': '$type_details.in_bytes'},
'total1': {'$sum': '$type_details.out_bytes'}
}},
{ '$sort': {'total': 1, 'total1': 1}}
])
如何计算聚合中的所有结果?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果你真的希望你的结果与总计数相结合,那么你总是可以将结果推送到他们自己的数组中:
result = db.connection_log.aggregate([
{ '$match': {
'login_time': {'$gte': datetime.datetime(2014, 5, 30, 6, 57)}
}},
{ '$group': {
'_id': {
'username': '$username',
'ras_id': '$ras_id',
'user_id': '$user_id'
},
'total': { '$sum': '$type_details.in_bytes'},
'total1': {'$sum': '$type_details.out_bytes'}
}},
{ '$sort': {'total': 1, 'total1': 1}},
{ '$group' {
'_id': null,
'results': {
'$push': {
'_id': '$_id',
'total': '$total',
'total1': '$total1'
}
},
'count': { '$sum': 1 }
}}
])
如果您使用的是MongoDB 2.6或更高版本,则可以'$push': '$$ROOT'
而不是实际指定那里的所有文档字段。
但实际上,除非您使用的是MongoDB 2.6并且明确要求将游标作为结果,否则该结果实际上已作为数组返回,而不会为具有计数的结果添加内部数组。所以只需得到数组的长度,在python中是:
len(result)
如果您确实将光标用于大型结果集或以其他方式使用$limit
和$skip
至" page"结果然后你需要做两个查询,其中一个只是总结"总计数",否则你不需要这样做。