Como recuperar os resultados da consulta

Após a criação de uma consulta, é possível especificar várias opções de recuperação para controlar ainda mais os resultados retornados. Acesse Consultas do Datastore para ver mais informações sobre a estruturação de consultas para o aplicativo.

Como iterar pelos resultados de consulta

Ao iterar os resultados de uma consulta usando o método Run de um valor Query, o Cloud Datastore recupera os resultados em lotes. Por padrão, cada lote contém 20 resultados. É possível continuar iterando pelos resultados da consulta até que todos sejam retornados ou a solicitação expire.

Para iterar cada entidade que corresponde à consulta, use o método Run para receber um Iterator, com o qual é possível percorrer cada entidade usando o método Next do 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 recuperar todas as entidades que correspondem à 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)
}

Como recuperar propriedades selecionadas de uma entidade

Para recuperar apenas as propriedades selecionadas de uma entidade, e não toda a entidade, use uma consulta de projeção. Esse tipo de consulta é executado com maior rapidez e custa menos que uma consulta que retorna entidades completas.

Da mesma forma, uma consulta somente de chaves economiza tempo e recursos ao retornar apenas as chaves das entidades correspondentes, e não as entidades completas. Para criar esse tipo de consulta, chame o método KeysOnly ao criar Query:

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

Como definir um limite para a consulta

Você pode especificar um limite para a consulta para controlar o número máximo de resultados retornados em um lote. No exemplo a seguir, recuperamos 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)
}

Próximas etapas