Google app engine AppEngine数据存储Golang:获取查询结果的祖先

Google app engine AppEngine数据存储Golang:获取查询结果的祖先,google-app-engine,go,google-cloud-datastore,Google App Engine,Go,Google Cloud Datastore,是否可以获取查询结果的祖先密钥?根据datastore文档(),query.Run()结果只有一个Cursor()和一个Next()函数,它们都不会引导您找到祖先。似乎这应该是范围内的信息,除非数据存储机制阻止它。是否由开发人员将祖先写入子对象上的属性(具有匹配类型)(如果我们愿意为此承担费用)?如果查询返回结果,则祖先包含在实体中 实体键由返回,例如: func (t *Iterator) Next(dst interface{}) (*Key, error) 从键中,使用方法获取祖先 请参

是否可以获取查询结果的祖先密钥?根据datastore文档(),query.Run()结果只有一个Cursor()和一个Next()函数,它们都不会引导您找到祖先。似乎这应该是范围内的信息,除非数据存储机制阻止它。是否由开发人员将祖先写入子对象上的属性(具有匹配类型)(如果我们愿意为此承担费用)?

如果查询返回结果,则祖先包含在实体中

实体键由返回,例如:

func (t *Iterator) Next(dst interface{}) (*Key, error)
从键中,使用方法获取祖先

请参见此示例:

query := datastore.NewQuery("MyEntity")

e := MyEntity{}
for i := query.Run(ctx); ; {
    if k, err = t.Next(&te); err == nil {
        log.Infof("Ancestor / parent key: %v", k.Parent())
    }
}

请注意,祖先存储在中,但不会导出:

type Query struct {
    ancestor *Key
    // ...
}
返回的包含
查询
,但也未报告:

type Query struct {
    ancestor *Key
    // ...
}
type Iterator struct {
    // q is the original query which yielded this iterator.
    q *Query
    //...
}

因此,您无法访问这些结构字段,您最好的选择是结果中的实际实体(或其键)。

谢谢。实际上,它似乎是唯一一个为了传出查询而不是查询结果而写入的对象,即祖先()。所以,它实际上并没有填充任何你还不知道的东西。