是否可以获取查询结果的祖先密钥?基于数据存储文档(https://cloud.google.com/appengine/docs/go/datastore/reference#Query.Run),query.Run()结果只有一个Cursor()和一个Next()函数,它们都不会引导您进入祖先。看起来这应该是范围内的信息,除非Datastore的机制阻止它。是否由开发人员将祖先写入孩子的房产(具有匹配类型)(如果我们愿意承担费用)?
答案 0 :(得分:2)
如果您的查询返回结果,则祖先包含在实体Key
中。
实体密钥由Iterator.Next()
返回,例如:
func (t *Iterator) Next(dst interface{}) (*Key, error)
从密钥中,使用Key.Parent()
方法获取祖先。
见这个例子:
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())
}
}
请注意,祖先存储在datastore.Query
中,但不会导出:
type Query struct {
ancestor *Key
// ...
}
datastore.Iterator
返回的Query.Run()
包含Query
,但它也未被导出:
type Iterator struct {
// q is the original query which yielded this iterator.
q *Query
//...
}
所以你不能访问这些结构域,你最好的选择是结果中的实际实体(或者更确切地说是它的键)。