用共同的祖先检索不同种类的实体

时间:2016-10-07 14:04:38

标签: google-app-engine go google-cloud-datastore

我想在数据存储区中存储分层实体。 子实体会有不同的类型,代表这样的东西:

type EntityA struct {
    Id        string
    LeafA     *EntityA
    LeafB     *EntityB
    SomeValue string
}

type EntityB struct {
    Id         string
    OtherValue string
}

我计划使用祖先,但似乎无法找回具有不同种类的共同祖先的孩子。

要检索整个父级,是否可以查询共同祖先的所有子级而不指定类型?

还有另一种可能性来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

来自Using ancestor paths

  

标识实体的完整密钥由一系列序列组成   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