Google appengine查询因命名空间而失败

时间:2015-04-30 00:52:52

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

我在我的应用程序中引入了命名空间,但是我遇到了一个问题,我现有的一个查询执行以下操作,以确定给定密钥是否存在实体。

// c is of type context.Context
c, _ = appengine.Namespace(c, "name")

k := datastore.NewKey(c, "Kind", "", id, nil)

q := datastore.NewQuery("Kind").Filter("__key__ =", k).KeysOnly()
keys, err := q.GetAll(c, nil)

执行此命令并将命名空间应用于上下文时,它会返回以下错误:

datastore_v3 API error 1: __key__ filter namespace is but query namespace is db

我可以使用Get查询,但我根本不需要实际检索实体。此外,仅限密钥查询是免费的!

更新

在我引入命名空间后,似乎所有查询都失败了。该文件未提及对指数的任何特殊处理:

https://cloud.google.com/appengine/docs/go/multitenancy/multitenancy

1 个答案:

答案 0 :(得分:0)

“默认情况下,数据存储区使用当前命名空间进行数据存储区请求.API在创建它们时将此当前命名空间应用于datastore.Key对象。因此,如果应用程序以序列化形式存储Key对象,则需要小心,因为命名空间保留在那些序列化中。“

将名称空间与数据存储区一起使用
https://cloud.google.com/appengine/docs/go/multitenancy/multitenancy#Go_Using_namespaces_with_the_Datastore