Recupero dei risultati delle query

Dopo aver creato una query, puoi specificare una serie di opzioni di recupero per controllare ulteriormente i risultati restituiti. Consulta le query del datastore per ulteriori informazioni su come strutturare le query per la tua app.

Eseguire l'iterazione dei risultati delle query

Durante l'iterazione dei risultati di una query utilizzando il metodo Run di un valore Query, Cloud Datastore recupera i risultati in batch. Per impostazione predefinita, ogni batch contiene 20 risultati. Puoi continuare a ripetere i risultati della query finché non vengono restituiti tutti o fino a quando la richiesta scade.

Per eseguire l'iterazione su ogni entità corrispondente alla query, utilizza il metodo Run per ottenere un Iterator, con il quale puoi esaminare ogni entità utilizzando il metodo Next di Iterator.

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

Recupero di proprietà selezionate da 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.

Analogamente, una query basata solo su chiavi consente di risparmiare tempo e risorse restituendo solo le chiavi delle entità a cui corrisponde, anziché le entità stesse. Per creare questo tipo di query, chiama il metodo KeysOnly durante la costruzione di 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 singolo batch. L'esempio seguente recupera le cinque persone più alte da Cloud 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