查询KeyProperty的父/祖先

时间:2012-11-12 01:25:15

标签: google-app-engine app-engine-ndb

是否可以根据KeyProperty的祖先(父)进行查询?

EG,类似于以下内容:

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

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

也就是说,我想找到所有带有条形键的foos,其中条形键的父级是some_key。

如果可能,我希望避免将bar的父项存储为单独的键属性。基本上我想在KeyProperty上做一个祖先查询,但看不出你怎么做,如果可能的话。

我目前的解决方案是使用ComputedProperty提取bar的父级并将其存储为单独的字段。这有效,但似乎没必要,因为我已经将父键存储为条形键的一部分。

1 个答案:

答案 0 :(得分:6)

是的,这称为祖先查询:

Foo.query(ancestor=some_key)

更新:

在评论中进行对话后,我们清理了所需的结果。只有在对相关属性编制索引时,查询才有效。您可以使用计算属性索引父级并查询其值。由于.parent()会返回一个密钥,因此这不应该是一个问题:

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

Foo.query(Foo.bar_parent == some_key)