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可能是一個更好的方式來做到這一點。