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():

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 será exibido.

Como iterar pelos resultados de consulta

Ao iterar os resultados de uma consulta usando os métodos PreparedQuery.asIterable() e PreparedQuery.asIterator(), o Cloud Datastore recupera os resultados em lotes. Por padrão, cada lote contém 20 resultados, mas é possível alterar esse valor usando FetchOptions.chunkSize(). É possível continuar iterando pelos resultados da consulta até que todos sejam retornados ou a solicitação expire.

Como recuperar propriedades selecionadas de uma entidade

Para recuperar apenas as propriedades selecionadas de uma entidade, e não toda a entidade, use uma consulta de projeção. Esse tipo de consulta é executado com maior rapidez e custa menos que uma consulta que retorna entidades completas.

Da mesma forma, uma consulta somente de chaves economiza tempo e recursos ao retornar apenas as chaves das entidades correspondentes, e não as entidades completas. Para criar esse tipo de consulta, use o método Query.setKeysOnly():

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

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:

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

A seguir