Abfrageergebnisse abrufen

Nachdem Sie eine Abfrage erstellt haben, können Sie verschiedene Abrufoptionen festlegen, um die gelieferten Ergebnisse noch gezielter einzugrenzen. Weitere Informationen zum Strukturieren von Abfragen für Ihre Anwendung finden Sie unter Datastore-Abfragen.

Einzelne Entität abrufen

Zum Abrufen nur einer einzelnen Entität, die mit Ihrer Abfrage übereinstimmt, verwenden Sie die Methode PreparedQuery.asSingleEntity():

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

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

Dies gibt das erste Ergebnis im Index zurück, das mit der Abfrage übereinstimmt. Wenn mehrere übereinstimmende Ergebnisse vorhanden sind, wird eine TooManyResultsException-Ausnahme ausgelöst.

Abfrageergebnisse durchlaufen

Beim iterativen Durchlaufen der Ergebnisse einer Abfrage mit den Methoden PreparedQuery.asIterable() und PreparedQuery.asIterator() ruft Cloud Datastore die Ergebnisse in Batches ab. Standardmäßig enthält jeder Batch 20 Ergebnisse. Sie können diesen Wert mit der Methode FetchOptions.chunkSize() ändern. Sie können die Abfrageergebnisse durchlaufen, bis alle Ergebnisse zurückgegeben sind oder eine Zeitüberschreitung eintritt.

Ausgewählte Attribute einer Entität abrufen

Wenn Sie anstatt einer vollständigen Entität nur eine Auswahl der zugehörigen Attribute abrufen möchten, verwenden Sie eine Projektionsabfrage. Dieser Abfragetyp wird schneller ausgeführt und kostet weniger als Abfragen, die vollständige Entitäten zurückgeben.

Analog dazu können Sie mit ausschließlich schlüsselbasierten Abfragen Zeit und Ressourcen sparen, da damit nur die Schlüssel für die übereinstimmenden Entitäten zurückgegeben werden und nicht die vollständigen Entitäten. Verwenden Sie zum Erstellen dieses Abfragetyps die Methode Query.setKeysOnly():

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

Limits für Abfragen festlegen

Sie können ein Limit für die Abfrage festlegen, um die Anzahl der in einem Batch zurückgegebenen Ergebnisse zu begrenzen. Im folgenden Beispiel werden die fünf größten Personen aus Cloud Datastore abgerufen:

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

Weitere Informationen