Recupera resultados de consultas

Después de construir una consulta, se pueden especificar opciones de recuperación para tener más control sobre los resultados que se muestran. Accede a consultas del almacén de datos para obtener más información acerca de cómo estructurar consultas en tu aplicación.

Recupera una sola entidad

Para recuperar una entidad única 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();

Esto muestra el primer resultado que se encontró en el índice que coincide con la consulta. Si hay más de un resultado coincidente, se muestra TooManyResultsException.

Itera a través de los resultados de la consulta

Cuando se realizan iteraciones sobre los resultados de una consulta mediante los métodos PreparedQuery.asIterable() y PreparedQuery.asIterator(), Cloud Datastore recupera los resultados por lotes. De forma predeterminada, cada lote contiene 20 resultados, pero puedes cambiar este valor con FetchOptions.chunkSize(). Puedes seguir iterando a través de los resultados hasta que se muestren todos o hasta que se agote el tiempo de espera de la solicitud.

Cómo recuperar 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 las que muestran entidades completas.

Del mismo modo, una consulta de solo claves ahorra tiempo y recursos porque solo muestra las claves de las entidades con las que coincide, en lugar de las entidades completas en sí. Para crear este tipo de consulta, usa el método Query.setKeysOnly():

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

Establece un límite para tu consulta

Puedes especificar un límite para tu consulta a fin de controlar el número máximo de resultados que se muestran en un lote. En el siguiente ejemplo, se recuperan 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));
}

Próximos pasos