检索查询结果

构建查询后,您可以指定一些检索选项以进一步控制查询返回的结果。如需详细了解如何为应用构建查询,请参阅数据存储区查询

遍历查询结果

使用 Run 方法和 Query 值遍历查询结果时,Datastore 会对结果进行批量检索。默认情况下,每批包含 20 个结果。您可以持续遍历查询结果,直到返回所有结果或者请求超时。

如需遍历与查询匹配的每个实体,请使用 Run 方法获取 Iterator;借助 IteratorNext 方法,可以对每个实体进行逐个检索。

q := datastore.NewQuery("Person")
t := q.Run(ctx)
for {
	var p Person
	k, err := t.Next(&p)
	if err == datastore.Done {
		break // No further entities match the query.
	}
	if err != nil {
		log.Errorf(ctx, "fetching next Person: %v", err)
		break
	}
	// Do something with Person p and Key k
	doSomething(k, p)
}

如需一次检索与查询匹配的所有实体,请使用 GetAll 方法。

q := datastore.NewQuery("Person")
var people []Person
keys, err := q.GetAll(ctx, &people)
if err != nil {
	log.Errorf(ctx, "fetching people: %v", err)
	return
}
for i, p := range people {
	k := keys[i]
	// Do something with Person p and Key k
	doSomething(k, p)
}

检索实体的特定属性

如需仅检索实体的选定属性(而非检索整个实体),请使用投影查询。与返回完整实体的查询相比,此类查询运行速度更快,且花费更低。

与之类似,仅限于键的查询将仅返回匹配的实体的键(而非完整实体),以节省时间和资源。如需创建此类查询,请在构建 Query 时调用 KeysOnly 方法:

q := datastore.NewQuery("Person").KeysOnly()

设置查询限制

您可以为查询指定限制,以控制一个批次中可返回的最大结果数。以下示例将从 Cloud Datastore 中检索身高排名前五的人:

q := datastore.NewQuery("Person").Order("-Height").Limit(5)
var people []Person
_, err := q.GetAll(ctx, &people)
// check err

for _, p := range people {
	log.Infof(ctx, "%s %s, %d inches tall", p.FirstName, p.LastName, p.Height)
}

后续步骤