Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Limite la cantidad de resultados devueltos

En esta guía, puedes aprender cómo limitar la cantidad de resultados devueltos por las operaciones de lectura con el controlador de Kotlin para MongoDB.

Usar limit() para limitar la cantidad de documentos que una operación de lectura retorna. Este método de instancia designa el número máximo de documentos que una operación de lectura puede devolver. Si no hay suficientes documentos para alcanzar el límite especificado, puede devolver un número menor. Si utiliza limit() con el método de instancia skip(), el salto se aplica primero y el límite solo se aplica a los documentos restantes después del salto. Para obtener más información sobre el método skip(), consulte nuestro guía para omitir documentos devueltos.

Los siguientes ejemplos demuestran, respectivamente, cómo insertar datos en una colección, cómo utilizar limit() para restringir el número de documentos devueltos y cómo combinar limit() con skip() para acotar aún más los resultados devueltos de una query.

Las siguientes secciones incluyen ejemplos que actualizan este documento de muestra:

{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }
{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }
{ "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }
{ "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 }
{ "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 }

Estos datos se modelan con la siguiente clase de datos de Kotlin:

data class Book(
@BsonId val id: Int,
val title: String,
val author: String,
val length: Int
)

El siguiente ejemplo query la colección para devolver los tres libros más largos. Primero compara todos los documentos con la query y luego ordena el campo length para devolver los libros con mayores longitudes antes que los de longitudes más cortas. Por último, limita el valor de retorno a 3 documentos y devuelve los siguientes tres documentos, ordenados por longitud:

val results = collection.find()
.sort(descending("length"))
.limit(3)
results.collect { println(it) }
Book(id=2, title=Les Misérables, author=Hugo, length=1462)
Book(id=6, title=A Dance with Dragons, author=Martin, length=1104)
Book(id=4, title=Infinite Jest, author=Wallace, length=1104)

Tip

El orden en que se llaman limit() y sort() no importa porque el comando find siempre aplica primero la ordenación y luego el límite. Las dos siguientes llamadas son equivalentes:

collection.find().sort(descending("length")).limit(3)
collection.find().limit(3).sort(descending("length"))

Para ver los tres libros más largos siguientes, añade el método skip() a tu llamada de find(). El argumento entero que se transmite a skip() determinará cuántos documentos devuelve la operación de búsqueda. Esta operación devuelve los documentos que describen el cuarto al sexto libro más largo:

val results = collection.find()
.sort(descending("length"))
.skip(3)
.limit(3)
results.collect { println(it) }
Book(id=3, title=Atlas Shrugged, author=Rand, length=1088)
Book(id=5, title=Cryptonomicon, author=Stephenson, length=918)
Book(id=1, title=The Brothers Karamazov, author=Dostoyevsky, length=824)

Puedes combinar skip() y limit() de esta manera para implementar la paginación de tu colección, devolviendo solo pequeños subconjuntos de la colección a la vez.

Nota

Para garantizar órdenes estables entre múltiples queries, debes ordenar utilizando una clave única (como _id). De lo contrario, una llamada a skip() y limit() puede producir resultados impredecibles cuando se combina con sort().

Por ejemplo, considera los siguientes datos:

{ type: "computer", data: "1", serial_no: 235235 }
{ type: "computer", data: "2", serial_no: 235237 }
{ type: "computer", data: "3", serial_no: 235239 }
{ type: "computer", data: "4", serial_no: 235241 }

Si ordenaste solo por type, sort() no garantiza el mismo orden al regresar. Agregar skip() y limit() a sort() podría devolver documentos diferentes para consultas diferentes. En este caso, ordenar por data o serial_no garantizaría un ordenamiento estable, ya que ambos son claves únicas.

Para obtener más información sobre los métodos y clases mencionados en esta guía, consulta la siguiente Documentación de la API:

  • FindFlow.collect()

  • MongoCollection.find()

Volver

Omitir resultados devueltos

En esta página