Extraer resultados de consultas

Después de crear una consulta, puedes especificar varias opciones de recuperación para controlar aún más los resultados que devuelve. Consulta Consultas de Datastore para obtener más información sobre cómo estructurar las consultas de tu aplicación.

Obtener una sola entidad

Para recuperar solo una entidad que coincida con tu consulta, usa el 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();

Devuelve el primer resultado encontrado en el índice que coincide con la consulta. Si hay más de un resultado coincidente, se produce un error TooManyResultsException.

Iterar los resultados de las consultas

Cuando se itera por los resultados de una consulta mediante los métodos PreparedQuery.asIterable() y PreparedQuery.asIterator(), Cloud Datastore obtiene los resultados en lotes. De forma predeterminada, cada lote contiene 20 resultados, pero puedes cambiar este valor con FetchOptions.chunkSize(). Puedes seguir iterando resultados de consultas hasta que se devuelvan todas o hasta que se agote el tiempo de espera de la solicitud.

Obtener las propiedades seleccionadas de una entidad

Para recuperar solo las propiedades seleccionadas de una entidad en lugar de la entidad completa, usa una consulta de proyección. Este tipo de consulta se ejecuta más rápido y cuesta menos que una que devuelve entidades completas.

Del mismo modo, una consulta de solo claves ahorra tiempo y recursos, ya que devuelve solo las claves de las entidades que coinciden, en lugar de las entidades completas. Para crear este tipo de consulta, usa el método Query.setKeysOnly():

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

Definir un límite para una consulta

Puedes especificar un límite para tu consulta y controlar el número máximo de resultados devueltos en un lote. En el siguiente ejemplo se obtienen las cinco personas más altas de 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));
}

Siguientes pasos