[英]count on aggregate in mongodb
这是我在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}}
])
如何计算所有结果的总和?
好吧,如果您真的希望将结果与总计数相加,那么您始终可以将结果放入自己的数组中:
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
来“分页”结果,那么您将需要执行两个查询,其中一个只是汇总“总数”,但是否则您不这样做不需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.