A obter resultados da consulta

Depois de criar uma consulta, pode especificar várias opções de obtenção para controlar ainda mais os resultados que devolve. Consulte as consultas da base de dados para obter mais informações sobre a estruturação de consultas para a sua app.

Obter uma única entidade

Para obter apenas uma entidade que corresponda à sua 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();

Isto devolve o primeiro resultado encontrado no índice que corresponde à consulta. (Se houver mais do que um resultado correspondente, é gerado um TooManyResultsException.)

Iterar os resultados da consulta

Quando itera os resultados de uma consulta através dos métodos PreparedQuery.asIterable() e PreparedQuery.asIterator(), o Cloud Datastore obtém os resultados em lotes. Por predefinição, cada lote contém 20 resultados, mas pode alterar este valor através de FetchOptions.chunkSize(). Pode continuar a iterar os resultados da consulta até que todos sejam devolvidos ou o pedido expire.

Obter propriedades selecionadas de uma entidade

Para obter apenas as propriedades selecionadas de uma entidade em vez da entidade completa, use uma consulta de projeção. Este tipo de consulta é executado mais rapidamente e custa menos do que uma consulta que devolve entidades completas.

Da mesma forma, uma consulta apenas com chaves poupa tempo e recursos ao devolver apenas as chaves das entidades que correspondem, em vez das próprias entidades completas. Para criar este tipo de consulta, use o método Query.setKeysOnly():

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

Definir um limite para a sua consulta

Pode especificar um limite para a sua consulta de modo a controlar o número máximo de resultados devolvidos num lote. O exemplo seguinte obtém 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));
}

O que se segue?