Como recuperar os resultados da consulta

Após a criação de uma consulta, é possível especificar várias opções de recuperação para controlar ainda mais os resultados retornados. Acesse Consultas do Datastore para mais informações sobre a estruturação de consultas para o aplicativo.

Como recuperar uma única entidade

Para recuperar apenas uma entidade que corresponda à consulta, use o método PreparedQuery.asSingleEntity() (em inglês):

Java 8

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

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

Java 7

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

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

Isso retorna o primeiro resultado encontrado no índice que corresponde à consulta. Se houver mais de um resultado correspondente, TooManyResultsException (em inglês) será exibido.

Como iterar pelos resultados de consulta

Quando você itera pelos resultados de uma consulta com os métodos PreparedQuery.asIterable() e PreparedQuery.asIterator(), os resultados são recuperados em lotes pelo Cloud Datastore. Por padrão, cada lote contém 20 resultados, mas é possível alterar esse valor com FetchOptions.chunkSize() (conteúdo dos links em inglês). É possível continuar iterando pelos resultados da consulta até que todos sejam retornados ou o tempo limite da solicitação se esgote.

Como recuperar propriedades selecionadas de uma entidade

Para recuperar apenas as propriedades selecionadas de uma entidade em vez de toda a entidade, use uma consulta de projeção. Esse tipo de consulta é executada mais rapidamente e custa menos que uma que retorna entidades completas.

Da mesma forma, com uma consulta somente de chaves, é possível economizar tempo e recursos, já que são retornadas apenas as chaves das entidades correspondentes em vez das entidades completas. Para criar esse tipo de consulta, use o método Query.setKeysOnly() (em inglês):

Como definir um limite para a consulta

Você pode especificar um limite para a consulta para controlar o número máximo de resultados retornados em um lote. No exemplo a seguir, recuperamos as cinco pessoas mais altas do Cloud Datastore:

Java 8

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));
}

Java 7

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));
}

Próximas etapas