寻找一种使用 ndb 查询对属性列表求和的有效方法。目前我只是获取结果并对其运行 for 循环。
class Player(ndb.Model):
score = ndb.IntegerProperty()
score_of_group = 0
all_players = Player.query().filter("various filters").fetch()
for player in all_players:
score_of_group += player.score
如果这就是您拥有的模型(单个模型),并且您的“各种过滤器”只是过滤该单个模型的不同方式,我不相信您可以直接在查询中求和。
对于 Python 代码本身,您可以使用内置的 sum 函数,因此您的代码可能类似于
all_players = Player.query().filter("various filters").fetch()
score_of_group = sum([x.score for x in all_players])
如果您碰巧有至少 2 个模型,并且您正在根据另一个模型中的值从另一个模型中获取记录(例如,您有一个人员列表,并且您需要从另一个表中检索他们的所有比赛/分数),那么您应该看看 @ndb.tasklet 来加速数据检索/使其更高效,但你仍然需要自己总结
数据存储中的 SUM 聚合现已普遍可用。
有多种语言的客户端库支持此特定功能。
通过聚合查询,用户可以避免执行客户端聚合,这会带来增加出口成本的额外负担。也不需要使用像cloud-functions这样的替代方案来更新后端的聚合值,这有其自身的成本限制。