我正在开发一个 Multi-Tenancy 应用程序,我需要从 KIND 和特定命名空间查询特定用户。
我能够从默认命名空间获取值。我在这里使用的包是“google.golang.org/appengine/datastore”
q := datastore.NewQuery(ENTITYNAME).Filter("Name =", ed.Expense.Name)
var expenses []ExpenseEntiry
return q.GetAll(ed.Ctx, &expenses)
最佳答案
命名空间值不是查询的一部分(它不是查询的属性)。命名空间来自执行查询时传递的上下文,例如至 Query.GetAll()
.
如果您有一个上下文(您将其传递给q.GetAll()
),您可以使用appengine.Namespace()
创建具有给定命名空间的派生上下文。功能。
例如:
ctx2, err := appengine.Namespace(ed.Ctx, "mynamespace")
// check err
并使用这个新上下文传递给Query.GetAll()
:
return q.GetAll(ctx2, &expenses)
您很少需要创建具有不同命名空间的新上下文,ed.Ctx
应该已经是具有正确命名空间的上下文。因此,当您创建 ed.Ctx 时,您应该已经在那里应用了命名空间,这样您就可以避免“意外”暴露其他租户的数据(这是一个主要的安全问题)。
关于google-app-engine - 如何使用 golang 中的命名空间从数据存储中查询实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47174559/