依赖mongodb中的聚合

依赖mongodb中的聚合,mongodb,count,aggregation-framework,Mongodb,Count,Aggregation Framework,这是我对pymongo中聚合的查询: db.connection\u log.aggregate([ {$match':{ 'login_time':{'$gte':datetime.datetime(2014,5,30,6,57)} }}, {'$group':{ “\u id”:{ “用户名”:“$username”, “ras_id”:“$ras_id”, “用户id”:“$user\u id” }, '总计':{'$sum':'$type_details.in_bytes'}, 'to

这是我对pymongo中聚合的查询:

db.connection\u log.aggregate([
{$match':{
'login_time':{'$gte':datetime.datetime(2014,5,30,6,57)}
}},
{'$group':{
“\u id”:{
“用户名”:“$username”,
“ras_id”:“$ras_id”,
“用户id”:“$user\u id”
}, 
'总计':{'$sum':'$type_details.in_bytes'},
'total1':{'$sum':'$type_details.out_bytes'}
}}, 
{$sort':{'total':1,'total1':1}
])

如何计算聚合中的所有结果?

添加到聚合管道的末尾:

$group: {
    _id:null,
    count:{
        $sum:1
    }
}

如果您真的希望结果与总计数相结合,那么您始终可以将结果推送到它们自己的数组中:

result=db.connection\u log.aggregate([
{$match':{
'login_time':{'$gte':datetime.datetime(2014,5,30,6,57)}
}},
{'$group':{
“\u id”:{
“用户名”:“$username”,
“ras_id”:“$ras_id”,
“用户id”:“$user\u id”
}, 
'总计':{'$sum':'$type_details.in_bytes'},
'total1':{'$sum':'$type_details.out_bytes'}
}}, 
{$sort':{'total':1,'total1':1},
{'$group'{
“_id”:null,
'结果':{
“$push”:{
“\u id”:“$\u id”,
'总计':'总计',
“total1”:“$total1”
}
},
'计数':{'$sum':1}
}}
])
如果您使用的是MongoDB 2.6或更高版本,您只需
“$push”:“$$ROOT”
,而不必实际指定那里的所有文档字段

但实际上,除非您使用MongoDB 2.6并显式要求作为结果的游标,否则该结果实际上已作为数组返回,而无需为带有计数的结果添加内部数组。因此,只需获取数组的长度,在python中为:

len(结果)

如果您确实使用光标来显示较大的结果集,或者使用and来“分页”结果,则需要执行两个查询,其中一个查询仅汇总“总计数”,否则您不需要执行此操作。

此(计数键)值返回错误的结果!我需要从聚合中删除所有结果(记录),以便在我的表上创建分页。所以我查询了两个aggregate,一个查询当前表,另一个查询条件上的所有记录。请帮助我创建分页。@user3676300然后您需要两个查询当然可以。但是,如何设置查询以获取聚合中的所有记录呢?谢谢您,尼尔先生。你的解决方案对我有效。但是在性能方面,以及它以多快的速度达到最佳状态?@user3676300更改如图所示的聚合语句与您已有的聚合语句之间没有太大区别。也就是说,我并不是真的推荐它,而是指出可能的情况是,您的结果已经包含了一系列文档,因此您可以直接使用python中的
len()
函数。除非您正在实现如上所述的“分页”,否则不需要再次发出聚合语句来获取结果的计数。