0

我有一个模型,如下所示:计算所有的孩子中的变量的总和(递归)

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

属性是什么(在顶级父的情况下)或者是重点指向另一个SomeModel实体。

我的问题是,什么是计算所有someint一个SomeModel父母的所有儿童的的总和的最有效的方法是什么?它是递归的,所以一个孩子本身可以有一个孩子,并且还需要计算其中的某个。

我发现它可以在写入时完成 - 只需递归地向实体父母写入即可。但是它可以在阅读时完成,还是总是会过于昂贵?

回答

2

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

请记住,如果您在放置实体时没有写出总和,那么每次请求时都必须输出总和(尽管可能会得到缓存结果),这听起来有点浪费。内存很便宜,并且在写入时添加更新的属性似乎对我来说是最好的主意。

顺便说一句,也许你不需要父母作为KeyProperty,ancestor可能是一个更好的方式来做到这一点。