gpt4 book ai didi

python - 如何在ndb中按sum查询

转载 作者:行者123 更新时间:2023-12-01 04:47:22 26 4
gpt4 key购买 nike

我正在尝试在我的网站中构建某种 KPI,并在如何检索数据方面苦苦挣扎。例如,假设我正在使用以下模型构建一个博客:

class MyPost(ndb.Model):
Author = ndb.KeyProperty(MyUser, required = True)
when = TZDateTimeProperty(required = True)
status = ndb.IntegerProperty(default = 1) # 1=draft, 2=published
text = ndb.TextProperty()

我想构建一个查询来列出我的顶级作者,这将给我一个结果(最好是排序的)

['Jack':10, 'Jane':8, 'Joe',0]

我可以想到两种方法:

  • query().fetch() 所有项目并手动计数这是非常低效但最灵活的
  • 对于用户中的作者:result[author]=query(...).fetch().count()效率一般,需要提前知道我的索引(如果我想按“作者最喜欢的宠物”查询,则行不通

哪一个更可取?

您还推荐哪些其他方法?

最佳答案

我建议对 MyUser 模型进行反规范化,即通过为 MyUser 提供 IntegerProperty 来引入冗余,例如 numposts,冗余地跟踪用户创作了多少个 MyPost 实体。在 NoSQL 数据存储中,经常需要反规范化。

您为这种适度的反规范化付出的代价是添加新帖子需要更多工作,因为发生这种情况时您还需要增加作者的numposts。然而,数据存储通常是“主要读取”的——与查询现有实体相比,添加新实体相对较少。反规范化的目的是使后一个事件对于重要的查询更加高效,而前一个事件的成本适中。

关于python - 如何在ndb中按sum查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29144859/

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