gpt4 book ai didi

python - 皮蒙戈 : Limiting the results used to calculate the average in a pipeline

转载 作者:可可西里 更新时间:2023-11-01 09:39:22 24 4
gpt4 key购买 nike

我正在使用 pymongo 并尝试创建一个简单的平均值列表,其中我的集合仅包含大量名称和时间。 (这是一个简单的数学游戏,其中存储了您正确回答问题的速度)。

每个结果都通过 python-eve REST api 添加到数据库中:

{ 
"_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")
}

所以我已经创建和更新了时间。

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

db = client.mathsgame4
pipe = [{'$group':
{'_id': '$name',
'average': {'$avg': '$time'},
}
},
{'$sort': {'average': 1}}]

res = db.results.aggregate(pipeline=pipe)

for each in res:
print(each['_id'] + " average is " + "%.2f" % each['average'])

最佳答案

还有一个选项,你可以尝试这样的事情。您可以在 $project 阶段组合 $avg 和 $slice。

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

关于python - 皮蒙戈 : Limiting the results used to calculate the average in a pipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com