检索查询结果

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

检索单个实体

如需仅检索与查询匹配的单个实体,请使用 PreparedQuery.asSingleEntity() 方法:

Query q =
    new Query("Person")
        .setFilter(new FilterPredicate("lastName", FilterOperator.EQUAL, targetLastName));

PreparedQuery pq = datastore.prepare(q);
Entity result = pq.asSingleEntity();

该方法将返回索引中找到的与查询匹配的第一个结果。(如果存在多个匹配结果,该方法将抛出 TooManyResultsException。)

遍历查询结果

使用 PreparedQuery.asIterable()PreparedQuery.asIterator() 方法遍历查询结果时,Cloud Datastore 会分批检索结果。默认情况下,每批包含 20 个结果,但您可以使用 FetchOptions.chunkSize() 更改此值。您可以持续遍历查询结果,直到返回所有结果或者请求超时。

检索实体的特定属性

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

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

Query q = new Query("Person").setKeysOnly();

设置查询限制

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

private List<Entity> getTallestPeople() {
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

  Query q = new Query("Person").addSort("height", SortDirection.DESCENDING);

  PreparedQuery pq = datastore.prepare(q);
  return pq.asList(FetchOptions.Builder.withLimit(5));
}

后续步骤