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.

Abfrageergebnisse durchlaufen

Beim Iterieren durch die Ergebnisse einer Abfrage mithilfe der Methode Run eines Query-Werts ruft Cloud Datastore die Ergebnisse in Batches ab. Standardmäßig enthält jeder Batch 20 Ergebnisse. Sie können die Abfrageergebnisse durchlaufen, bis alle Ergebnisse zurückgegeben sind oder eine Zeitüberschreitung eintritt.

Verwenden Sie zum Iterieren durch die einzelnen Entitäten, die Ihrer Abfrage entsprechen, die Methode Run, um einen Iterator abzurufen, mit dem Sie jede Entität mithilfe der Methode Next des Iterator durchlaufen können.

q := datastore.NewQuery("Person")
t := q.Run(ctx)
for {
	var p Person
	k, err := t.Next(&p)
	if err == datastore.Done {
		break // No further entities match the query.
	}
	if err != nil {
		log.Errorf(ctx, "fetching next Person: %v", err)
		break
	}
	// Do something with Person p and Key k
	doSomething(k, p)
}

Wenn Sie alle Entitäten, die Ihrer Abfrage entsprechen, auf einmal abrufen möchten, verwenden Sie die Methode GetAll.

q := datastore.NewQuery("Person")
var people []Person
keys, err := q.GetAll(ctx, &people)
if err != nil {
	log.Errorf(ctx, "fetching people: %v", err)
	return
}
for i, p := range people {
	k := keys[i]
	// Do something with Person p and Key k
	doSomething(k, p)
}

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 nur die Schlüssel für die übereinstimmenden Entitäten zurückgegeben werden, nicht jedoch die vollständigen Entitäten. Rufen Sie zum Erstellen dieses Abfragetyps die Methode KeysOnly auf, wenn Sie die Query erstellen:

q := datastore.NewQuery("Person").KeysOnly()

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:

q := datastore.NewQuery("Person").Order("-Height").Limit(5)
var people []Person
_, err := q.GetAll(ctx, &people)
// check err

for _, p := range people {
	log.Infof(ctx, "%s %s, %d inches tall", p.FirstName, p.LastName, p.Height)
}

Weitere Informationen