Recupero dei risultati delle query

Dopo aver creato una query, puoi specificare una serie di opzioni di recupero per controllare ulteriormente i risultati restituiti. Per ulteriori informazioni sulla strutturazione delle query per la tua app, consulta Query Datastore.

Eseguire l'iterazione dei risultati delle query

Quando esegui l'iterazione dei risultati di una query utilizzando il Run metodo di un Query valore , Datastore recupera i risultati in batch. Per impostazione predefinita, ogni batch contiene 20 risultati. Puoi continuare a eseguire l'iterazione dei risultati delle query finché non vengono restituiti tutti o la richiesta va in timeout.

Per eseguire l'iterazione di ogni entità che corrisponde alla query, utilizza il Run metodo per ottenere un Iterator, con cui puoi scorrere ogni entità utilizzando il Iterator's Next metodo.

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

Per recuperare contemporaneamente tutte le entità corrispondenti alla query, utilizza il GetAll metodo.

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

Recuperare le proprietà selezionate di un'entità

Per recuperare solo le proprietà selezionate di un'entità anziché l'intera entità, utilizza una query di proiezione. Questo tipo di query viene eseguito più velocemente e costa meno di una che restituisce entità complete.

Allo stesso modo, una query basata solo su chiavi consente di risparmiare tempo e risorse restituendo solo le chiavi delle entità corrispondenti, anziché le entità complete. Per creare questo tipo di query, chiama il KeysOnly metodo quando crei la Query. :

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

Impostare un limite per la query

Puoi specificare un limite per la query per controllare il numero massimo di risultati restituiti in un batch. L'esempio seguente recupera le cinque persone più alte da Datastore:

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

Passaggi successivi