计算所有子项中变量的总和(递归)

时间:2016-02-13 11:56:39

标签: python-2.7 google-app-engine google-cloud-datastore app-engine-ndb

我的模型如下:

class SomeModel(ndb.Model):
  parent = ndb.KeyProperty()
  someint = ndb.IntegerProperty(default = 2)
  sum_of_child_some_int = ndb.IntegerProperty()

属性不是(在顶级父级的情况下)或是指向另一个 SomeModel 实体的Key。

我的问题是,计算 SomeModel 父级所有孩子的所有 someint 总和的最有效方法是什么?它是递归的,所以孩子本身可以有一个孩子, someint 也需要计算。

我看到它可以在写入时完成 - 只需递归地写入实体父项。但它可以在阅读时完成,还是总是太昂贵?

1 个答案:

答案 0 :(得分:2)

如果您不想在写入时放置该数字,则可以使用祖先查询来获取给定实体的所有子项并提取 someint 属性。如果您打算这样做,我认为最有效的方法是使用projection queries

请记住,如果你在放置实体时没有写出这笔金额,你必须在每次请求时都计算总和(尽管你可能得到一个缓存的结果),这听起来有点浪费。内存很便宜,在写入时添加另一个属性似乎对我来说是最好的主意。

顺便说一句,也许您不需要将父项作为KeyProperty,ancestor可能是更好的方法。