是否可以获取查询结果的祖先键?根据 datastore 文档 ( https://cloud.google.com/appengine/docs/go/datastore/reference#Query.Run ),query.Run() 结果只有一个 Cursor() 和一个 Next() 函数,它们都不会引导您找到祖先。看起来这应该是范围内的信息,除非 Datastore 的机制阻止它。是否由开发人员将祖先写入子项(如果我们愿意承担成本)的属性(具有匹配的种类)?
最佳答案
如果您的查询返回结果,则祖先包含在实体 Key
中.
实体键由Iterator.Next()
返回例如:
func (t *Iterator) Next(dst interface{}) (*Key, error)
从 key 中,使用 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
//...
}
因此您无法访问这些结构字段,您最好的选择是结果中的实际实体(或者更确切地说是它的键)。
关于google-app-engine - AppEngine 数据存储 Golang : Get ancestor for a query result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38851549/