如何在ndb中按总和查询

how to query by sum in ndb

我正在尝试在我的网站中构建某种 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]

我可以想到两种方法:

哪个更好?

您会推荐哪些其他方法?

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

您为这种适度的去规范化付出的代价是添加一个新的 post 需要更多的工作,因为当发生这种情况时您还需要增加作者的 numposts。然而,数据存储通常是 "read mostly" —— 与查询现有实体相比,添加新实体的情况相对较少。反规范化的目的是使后者 activity 对于重要的查询更加有效,而前者 activity.

的成本适中。