【问题标题】:Retrieve entity of different kind with a common ancestor检索具有共同祖先的不同类型的实体
【发布时间】:2016-10-07 14:04:37
【问题描述】:

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

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

type EntityB struct {
    Id         string
    OtherValue string
}

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

要检索整个父母,是否可以在不指定种类的情况下查询共同祖先的所有孩子?

或者是否有另一种可能解决这个问题?

【问题讨论】:

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


【解决方案1】:

来自Using ancestor paths

识别实体的完整密钥由一系列 种类标识符对指定其祖先路径并终止 与实体本身的那些:

[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]

对于根实体,祖先路径为空,键由 仅具有实体自己的种类和标识符:

[Person:GreatGrandpa]

换句话说,实体组中任何实体的键(包括根实体-共同祖先)是整个祖先路径的键列表,从根开始实体的密钥。

因此,要从任何后代中获取根实体键,只需获取该实体键列表中的第一个元素即可。

不熟悉go,但在python 中,祖先路径中的特定项目是一个元组(对),并且要从任何实体键中获取根实体键,它会是这样的:

root_entity_key = ndb.Key(pairs=tuple(list(entity_key.pairs())[0])

现在,您可以使用根实体(共同祖先)键为您想要的任何后代类型执行ancestor queries

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多