A obter resultados da consulta

Depois de criar uma consulta, pode especificar várias opções de obtenção para controlar ainda mais os resultados que devolve. Consulte as consultas da base de dados para obter mais informações sobre a estruturação de consultas para a sua app.

Iterar os resultados da consulta

Quando itera os resultados de uma consulta através do método Run de um valor Query, o Cloud Datastore obtém os resultados em lotes. Por predefinição, cada lote contém 20 resultados. Pode continuar a iterar os resultados da consulta até que todos sejam devolvidos ou o pedido expire.

Para iterar cada entidade que corresponda à sua consulta, use o método Run para obter um Iterator, com o qual pode percorrer cada entidade usando o método Next de 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)
}

Para obter todas as entidades que correspondem à sua consulta de uma só vez, use o método 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)
}

Obter propriedades selecionadas de uma entidade

Para obter apenas as propriedades selecionadas de uma entidade em vez da entidade completa, use uma consulta de projeção. Este tipo de consulta é executado mais rapidamente e custa menos do que uma consulta que devolve entidades completas.

Da mesma forma, uma consulta apenas com chaves poupa tempo e recursos ao devolver apenas as chaves das entidades que correspondem, em vez das próprias entidades completas. Para criar este tipo de consulta, chame o método KeysOnly ao construir o Query:

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

Definir um limite para a sua consulta

Pode especificar um limite para a sua consulta de modo a controlar o número máximo de resultados devolvidos num lote. O exemplo seguinte obtém as cinco pessoas mais altas do 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)
}

O que se segue?