如何对 Google 数据存储查询结果中的属性列表求和?

问题描述 投票:0回答:2

寻找一种使用 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-2.7 google-app-engine google-cloud-datastore
2个回答
3
投票

如果这就是您拥有的模型(单个模型),并且您的“各种过滤器”只是过滤该单个模型的不同方式,我不相信您可以直接在查询中求和。

对于 Python 代码本身,您可以使用内置的 sum 函数,因此您的代码可能类似于

    all_players = Player.query().filter("various filters").fetch()
    score_of_group = sum([x.score for x in all_players])

如果您碰巧有至少 2 个模型,并且您正在根据另一个模型中的值从另一个模型中获取记录(例如,您有一个人员列表,并且您需要从另一个表中检索他们的所有比赛/分数),那么您应该看看 @ndb.tasklet 来加速数据检索/使其更高效,但你仍然需要自己总结


0
投票

数据存储中的 SUM 聚合现已普遍可用。

有多种语言的客户端库支持此特定功能。

通过聚合查询,用户可以避免执行客户端聚合,这会带来增加出口成本的额外负担。也不需要使用像cloud-functions这样的替代方案来更新后端的聚合值,这有其自身的成本限制。

© www.soinside.com 2019 - 2024. All rights reserved.