Pymongo:限制用于计算管道中平均值的结果

时间:2017-01-07 21:04:24

标签: python mongodb mongodb-query aggregation-framework

我正在使用pymongo并试图创建一个简单的平均列表,其中我的集合只是有一堆名字和时间。 (这是一个简单的数学游戏,可以存储正确回答问题的速度)。

通过python-eve REST api:

将每个结果添加到数据库中
header("Location:  search-result-page-hotel.php?id=". $brochure_id");

所以我有创建和更新的时间。

我想显示每位球员最近10分的平均时间。目前我有一个工作组正在为所有分数的平均值创建,但我最近需要10个。我可以对$ avg表达式应用限制还是有更好的方法?谢谢你的帮助。

{ 
    "_id" : ObjectId("5866ed13fdc3f36f0620dfdb"), 
    "_updated" : ISODate("2016-12-30T23:26:11Z"), 
    "score" : 1, 
    "name" : "adrian", 
    "time" : 2.7628954648971558, 
    "level" : "1", 
    "_etag" : "08dcbbf3718f837194ba6b439cfb6b3de1d5994f", 
    "_created" : ISODate("2016-12-30T23:26:11Z") 
}

1 个答案:

答案 0 :(得分:2)

还可以尝试这样的选项。您可以在$ project阶段组合$ avg和$ slice。

aggregate([{
    '$sort': {'name': 1,'_created': -1}
}, {
    '$group': {
        '_id': '$name',
        'times': {'$push': '$time'},
    }
}, {
    '$project': {
        'average': {'$avg': {'$slice': ['$times', 10]}
        }
    }
}, {
    '$sort': {'average': 1}
}])