我想在数据存储区中存储分层实体。 子实体会有不同的类型,代表这样的东西:
type EntityA struct {
Id string
LeafA *EntityA
LeafB *EntityB
SomeValue string
}
type EntityB struct {
Id string
OtherValue string
}
我计划使用祖先,但似乎无法找回具有不同种类的共同祖先的孩子。
要检索整个父级,是否可以查询共同祖先的所有子级而不指定类型?
还有另一种可能性来解决这个问题吗?
答案 0 :(得分:1)
标识实体的完整密钥由一系列序列组成 kind-identifier对指定其祖先路径并终止 与实体本身的那些:
[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]
对于根实体,祖先路径为空且密钥包含 仅仅是实体自己的种类和标识符:
[Person:GreatGrandpa]
换句话说,实体组中实体任何的键(包括根实体 - 共同祖先)是整个祖先路径的键列表,它以root开头实体的关键。
因此,要从任何后代获取根实体密钥,只需获取该实体的密钥列表中的第一个元素。
不熟悉go
,但在python
中,祖先路径中的特定项目是元组(对),并且要从任何实体键获取根实体密钥,它就是某种东西像这样:
root_entity_key = ndb.Key(pairs=tuple(list(entity_key.pairs())[0])
现在,使用根实体(共同祖先)键,您可以为所需的任何后代执行ancestor queries。