2

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

EG,类似于以下内容:

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

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

也就是说,我想找到所有具有 bar 键的 foo,其中 bar 键的父级是 some_key。

如果可能的话,我想避免将其父级存储bar为单独的键属性。基本上我想对 KeyProperty 进行祖先查询,但如果可能的话,我看不到你怎么能做到这一点。

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

4

1 回答 1

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)
于 2012-11-12T03:16:03.363 回答