google-app-engine - AppEngine 数据存储 Golang : Get ancestor for a query result

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

是否可以获取查询结果的祖先键?根据 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.IteratorQuery.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/

相关文章:

google-app-engine - 使用 ReferenceProperty 的 "IN' 查询构建 GQL

go - 运行curl命令时,TCP服务器返回错误

java - 没有祖先的 Google App Engine HRD 查询

java - App Engine 1.7.5 不创建新的 local_db.bin 数据存储文件

google-app-engine - 我们应该将 App Engine 上下文存储在全局变量中还是为每个请求都创建它?

python - 通过实体 ID 检索实体

python - 本地正常,但在应用程序引擎上 : ModuleNotFoundError: No module named 'google'

javascript - channel API - 生产中的 token 无效,可在开发服务器上使用

google-app-engine - Google App Engine Golang - 如何获取用户的 IP 地址?

sockets - 如何读取在 Golang 中接收到的 UDP 数据报的输入接口(interface)和远程套接字地址?