【发布时间】:2017-09-28 17:28:17
【问题描述】:
我知道 KeysOnly 查询更便宜,但我想知道我是否正确实施它。
例如,如果我为 KeysOnly 创建了一个GetAll 函数(如下面的那个),我还应该初始化用户结构([]User)吗?
func GetAllUserKeysByFilter(ctx context.Context, filters ...UserFilter) ([]*datastore.Key, error) {
var users []User
query := datastore.NewQuery("User").KeysOnly()
for _, filter := range filters {
if filter.Age != 0 {
query = query.Filter("Age =", filter.Age)
}
if filter.Limit != 0 {
query = query.Limit(filter.Limit)
}
}
keys, err := DatastoreClient().GetAll(ctx, query, &users)
if err != nil {
return nil, err
}
return keys, nil
}
此外,如果我只想获取直接调用的密钥(我已经知道名称密钥 - 在本例中为 namekey == username)以检查此密钥是否存在,那么正确的方法是什么做吗?
现在我喜欢这样:
func GetUserByNameKey(ctx context.Context, key *datastore.Key) (User, error) {
var user User
err := DatastoreClient().Get(ctx, key, &user)
if err != nil {
return user, err
}
return user, nil
}
但由于我只关心用户密钥是否存在,因此能否以某种方式将其转换为更便宜?
也许将GetAllUserKeysByFilter 与Limit == 1 一起使用会更便宜?
【问题讨论】:
标签: google-app-engine go google-cloud-datastore