Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 查询KeyProperty';父母/祖先_Google App Engine_App Engine Ndb - Fatal编程技术网

Google app engine 查询KeyProperty';父母/祖先

Google app engine 查询KeyProperty';父母/祖先,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,是否可以基于KeyProperty的祖先(父级)进行查询 例如,如下所示: class Foo(ndb.Model): bar = ndb.KeyProperty() Foo.query().filter(Foo.bar.parent == some_key) 也就是说,我想找到所有具有bar键的foo,其中bar键的父项是某个_键 如果可能的话,我希望避免将bar的父项存储为单独的键属性。基本上,我想对KeyProperty执行祖先查询,但如果可能的话,我看不出如何执行 我当前的解

是否可以基于KeyProperty的祖先(父级)进行查询

例如,如下所示:

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

Foo.query().filter(Foo.bar.parent == some_key)
也就是说,我想找到所有具有bar键的foo,其中bar键的父项是某个_键

如果可能的话,我希望避免将
bar
的父项存储为单独的键属性。基本上,我想对KeyProperty执行祖先查询,但如果可能的话,我看不出如何执行


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

是的,这称为祖先查询:

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)

谢谢,但我想查询Bar KeyProperty的祖先,而不是Foo对象的祖先。也就是说,我想找到所有具有一个名为bar的key属性的foo,该属性具有一些作为祖先(甚至只是bar的父项)的密钥。这实际上是不可能的,本质上相当于通配符文本搜索,因为键从它们的对序列化为base64安全值。谢谢。我想我只需要为家长存储额外的数据。是的,很不幸。如果您对密钥结构有很好的了解,可以创建一个自定义模型来存储这些密钥,然后只需使用
StructuredProperty
。像
Foo.bar.parent
这样的查询可以很好地处理结构化属性。@Dylan当它不能回答你的问题时,你为什么接受这个答案?