Extraer resultados de consultas

Después de crear una consulta, puedes especificar varias opciones de recuperación para controlar aún más los resultados que devuelve. Consulta Consultas de Datastore para obtener más información sobre cómo estructurar las consultas de tu aplicación.

Iterar los resultados de las consultas

Cuando se itera por los resultados de una consulta mediante el método Run de un valor Query, Cloud Datastore obtiene los resultados en lotes. De forma predeterminada, cada lote contiene 20 resultados. Puedes seguir iterando resultados de consultas hasta que se devuelvan todas o hasta que se agote el tiempo de espera de la solicitud.

Para iterar en cada entidad que coincida con tu consulta, usa el método Run para obtener un Iterator, con el que puedes recorrer cada entidad mediante el 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 recuperar todas las entidades que coincidan con tu consulta a la vez, usa el 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)
}

Obtener las propiedades seleccionadas de una entidad

Para recuperar solo las propiedades seleccionadas de una entidad en lugar de la entidad completa, usa una consulta de proyección. Este tipo de consulta se ejecuta más rápido y cuesta menos que una que devuelve entidades completas.

Del mismo modo, una consulta de solo claves ahorra tiempo y recursos, ya que devuelve solo las claves de las entidades que coinciden, en lugar de las entidades completas. Para crear este tipo de consulta, llama al método KeysOnly al crear el Query:

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

Definir un límite para una consulta

Puedes especificar un límite para tu consulta y controlar el número máximo de resultados devueltos en un lote. En el siguiente ejemplo se obtienen las cinco personas más altas de 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)
}

Siguientes pasos