Docs Menu
Docs Home
/ /

Limitar el número de resultados devueltos

En esta guía, puede aprender cómo limitar la cantidad de documentos devueltos de una operación de lectura.

Los ejemplos de esta guía utilizan lo siguiente: Course Estructura como modelo para los documentos de la colección courses:

type Course struct {
Title string
Enrollment int32
}

Para ejecutar los ejemplos de esta guía, cargue los datos de muestra en la colección db.courses con el siguiente fragmento:

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "Romantic Era Music", Enrollment: 15},
Course{Title: "Concepts in Topology", Enrollment: 35},
Course{Title: "Ancient Greece", Enrollment: 100},
Course{Title: "Physiology I", Enrollment: 60},
}
result, err := coll.InsertMany(context.TODO(), docs)

Tip

Bases de datos y colecciones inexistentes

Si la base de datos y la colección necesarias no existen cuando realiza una operación de escritura, el servidor las crea implícitamente.

Cada documento contiene una descripción de un curso universitario que incluye el título del curso y la matrícula máxima, correspondiente a los campos title y enrollment de cada documento.

Para limitar la cantidad de documentos devueltos de una consulta, pase la cantidad de documentos que desea que se devuelvan al método SetLimit() de las opciones de la operación de lectura.

Las siguientes operaciones de lectura toman un objeto de opciones como parámetro:

  • Find()

  • CountDocuments()

  • gridfs.Bucket.Find()

Si el límite es 0 o supera el número de documentos coincidentes, el método devuelve todos los documentos. Si el límite es un número negativo, el método utiliza el valor absoluto del número negativo como límite y cierra el cursor después de recuperar los documentos.

El siguiente ejemplo muestra cómo devolver dos documentos que tienen un valor de campo enrollment mayor que 20:

filter := bson.D{{"enrollment", bson.D{{"$gt", 20}}}}
opts := options.Find().SetLimit(2)
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Concepts in Topology","enrollment":35}
{"title":"Ancient Greece","enrollment":100}

El controlador ejecuta el comportamiento límite en último lugar, independientemente del orden en el que configure cualquier otra opción.

El siguiente ejemplo realiza una operación Find() con el siguiente comportamiento:

  • Ordena los resultados en orden descendente en el campo enrollment

  • Omite el primer documento

  • Devuelve los dos primeros documentos restantes.

filter := bson.D{}
opts := options.Find().SetSort(bson.D{{"enrollment", -1}}).SetLimit(2).SetSkip(1)
cursor, err := coll.Find(context.TODO(), filter, opts)
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Physiology I","enrollment":60}
{"title":"Concepts in Topology","enrollment":35}

Tip

El uso de cualquiera de las siguientes configuraciones de opciones también produce el mismo resultado:

opts := options.Find().SetSort(bson.D{{"enrollment", -1}}).SetSkip(1).SetLimit(2)
opts := options.Find().SetLimit(2).SetSort(bson.D{{"enrollment", -1}}).SetSkip(1)
opts := options.Find().SetLimit(2).SetSkip(1).SetSort(bson.D{{"enrollment", -1}})
opts := options.Find().SetSkip(1).SetSort(bson.D{{"enrollment", -1}}).SetLimit(2)
opts := options.Find().SetSkip(1).SetLimit(2).SetSort(bson.D{{"enrollment", -1}})

También puedes incluir el Etapa$limit para especificar un límite en una canalización de agregación.

El siguiente ejemplo muestra cómo devolver tres documentos:

limitStage := bson.D{{"$limit", 3}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{limitStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Romantic Era Music","enrollment":15}
{"title":"Concepts in Topology","enrollment":35}
{"title":"Ancient Greece","enrollment":100}

Para obtener más información sobre las operaciones mencionadas, consulte las siguientes guías:

  • Especifica un query

  • Retrieve Data

  • Ordenar resultados

  • Omitir resultados devueltos

  • Agregación

Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API:

Volver

Saltar resultados

En esta página