2012-11-12 34 views
2

是否有可能基於KeyProperty的祖先(父)進行查詢?關於KeyProperty的父/祖的查詢

EG,類似如下:

class Foo(ndb.Model): 
    bar = ndb.KeyProperty() 

Foo.query().filter(Foo.bar.parent == some_key) 

也就是說,我想找到其中有一個酒吧關鍵所在吧密鑰的母是some_key所有的Foo。

我想避免必須將bar的父項存儲爲單獨的鍵屬性(如果可能的話)。基本上我想對KeyProperty做一個祖先查詢,但是看不到如何做到這一點,如果可能的話。

我目前的解決方案是使用ComputedProperty來提取bar的父級並將其存儲爲單獨的字段。這有效,但似乎沒有必要,因爲我已經將父鍵存儲爲條鍵的一部分。

回答

6

是的,這就是所謂的祖先查詢:

Foo.query(ancestor=some_key) 

UPDATE:

在評論交談後,我們清理了預期的效果。查詢將僅在索引的財產被索引時才起作用。您可以通過使用計算屬性並查詢它的值來對父母進行索引。由於.parent()將返回鍵,這不應該是一個問題:

class Foo(ndb.Model): 
    bar = ndb.KeyProperty() 
    bar_parent = ndb.ComputedProperty(lambda self: self.bar.parent()) 

Foo.query(Foo.bar_parent == some_key) 
+0

謝謝,但我想在酒吧KeyProperty的祖先,而不是Foo對象的祖先查詢。也就是說,我想找到所有有一個關鍵屬性的Foos,這個屬性被稱爲bar,它具有some_key作爲祖先(或者甚至僅僅是bar的父級)。 – Dylan

+0

我的歉意,我應該仔細閱讀。這不是真的可行,基本上等同於通配符文本搜索,因爲密鑰是從它們的對序列化爲base64安全值。 – bossylobster

+0

謝謝。我想我只需要存儲父級的額外數據。 – Dylan