计算所有 children 内变量的总和(递归)
Calculating the sum of a variable within all children (recursive)
我有一个模型如下:
class SomeModel(ndb.Model):
parent = ndb.KeyProperty()
someint = ndb.IntegerProperty(default = 2)
sum_of_child_some_int = ndb.IntegerProperty()
parent 属性 要么什么都不是(在顶层 parent 的情况下)要么是指向另一个的 Key SomeModel 实体。
我的问题是,计算一个 的所有 children 的所有 someint 的总和的最有效方法是什么SomeModel parent?它是递归的,所以 child 本身可以有一个 child,并且 someint 也需要计算。
我看到它可以在写入时完成 - 只需递归地写入实体 parents。但是它可以在阅读时完成吗,还是总是太贵了?
如果您不想在写入时输入该数字,您可以使用祖先查询来获取给定实体的所有子项并提取 someint 属性。如果您要这样做,我认为最有效的方法是使用 projection queries.
请记住,如果您在放置实体时不写那个总和,则每次请求它时都必须进行总和(尽管您可能会得到缓存的结果),这听起来有点浪费。内存很便宜,在写入时添加另一个 属性 更新对我来说似乎是最好的主意。
顺便说一下,也许您不需要父级作为 KeyProperty,ancestor 可能是更好的方法。
我有一个模型如下:
class SomeModel(ndb.Model):
parent = ndb.KeyProperty()
someint = ndb.IntegerProperty(default = 2)
sum_of_child_some_int = ndb.IntegerProperty()
parent 属性 要么什么都不是(在顶层 parent 的情况下)要么是指向另一个的 Key SomeModel 实体。
我的问题是,计算一个 的所有 children 的所有 someint 的总和的最有效方法是什么SomeModel parent?它是递归的,所以 child 本身可以有一个 child,并且 someint 也需要计算。
我看到它可以在写入时完成 - 只需递归地写入实体 parents。但是它可以在阅读时完成吗,还是总是太贵了?
如果您不想在写入时输入该数字,您可以使用祖先查询来获取给定实体的所有子项并提取 someint 属性。如果您要这样做,我认为最有效的方法是使用 projection queries.
请记住,如果您在放置实体时不写那个总和,则每次请求它时都必须进行总和(尽管您可能会得到缓存的结果),这听起来有点浪费。内存很便宜,在写入时添加另一个 属性 更新对我来说似乎是最好的主意。
顺便说一下,也许您不需要父级作为 KeyProperty,ancestor 可能是更好的方法。