Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Limite la cantidad de resultados devueltos

En esta guía, puedes aprender a limitar el número de documentos devueltos por una operación de lectura.

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

type Course struct {
Title string
Enrollment int32
}

Para ejecutar los ejemplos en esta guía, carga 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 realizas una operación de guardar, el servidor las crea implícitamente.

Cada documento contiene una descripción de una asignatura universitaria que incluye el título y la cantidad máxima de inscritos, correspondientes a los campos title y enrollment en cada documento.

Para limitar el número de documentos que se devuelven de una query, pase el número de documentos que desea recibir 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 tengan un valor de campo de 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 realiza el comportamiento de límite al final sin importar el orden en que establezcas 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 de los 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 puede incluir el $limit etapa para especificar un límite en una pipeline 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 aprender más 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

Omitir resultados

En esta página