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 de las operaciones de lectura con el driver de Java 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(), consulta 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.

La siguiente operación inserta documentos que representan libros en una colección:

collection.insertMany(Arrays.asList(
new Document().append("_id", 1)
.append("title", "The Brothers Karamazov").append("length", 824)
.append("author", "Dostoyevsky"),
new Document().append("_id", 2)
.append("title", "Les Misérables").append("length", 1462).append("author", "Hugo"),
new Document().append("_id", 3)
.append("title", "Atlas Shrugged").append("length", 1088).append("author", "Rand"),
new Document().append("_id", 4)
.append("title", "Infinite Jest").append("length", 1104).append("author", "Wallace"),
new Document().append("_id", 5)
.append("title", "Cryptonomicon").append("length", 918).append("author", "Stephenson"),
new Document().append("_id", 6)
.append("title", "A Dance with Dragons").append("length", 1104)
.append("author", "Martin")
));

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

import com.mongodb.client.*;
import org.bson.Document;
import static com.mongodb.client.model.Sorts.descending;
// ...
// define a cursor that will return the first 3 sorted items
MongoCursor<Document> cursor = collection.find()
.sort(descending("length"))
.limit(3)
.iterator();
// print out items
try {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
}
// close the cursor
finally {
cursor.close();
}

El ejemplo de código anterior imprime los siguientes tres documentos, ordenados por longitud:

Document{{_id=2, title=Les Misérables, author=Hugo, length=1462}}
Document{{_id=6, title=A Dance with Dragons, author=Martin, length=1104}}
Document{{_id=4, title=Infinite Jest, author=Wallace, length=1104}}

Tip

El orden en el que llames a limit() y sort() no importa porque el controlador reordena las llamadas para aplicar primero la clasificación y después el límite. Las siguientes dos llamadas son equivalentes:

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

Para ver los siguientes tres libros más largos, agrega el método skip() a tu llamada find() como se muestra en el siguiente ejemplo de código:

MongoCursor<Document> cursor = collection.find()
.sort(descending("length"))
.limit(3)
.skip(3)
.iterator();

Esta operación devuelve los documentos que describen los libros cuarto a sexto más largos:

Document{{_id=3, title=Atlas Shrugged, author=Rand, length=1088}}
Document{{_id=5, title=Cryptonomicon, author=Stephenson, length=918}}
Document{{_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 clasificaciones estables en varias consultas, debe clasificar utilizando una clave única (como _id). De lo contrario, una llamada a skip() y limit() podría 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. Si se añaden skip() y limit() a la sort(), pueden devolverse diferentes documentos para diferentes queries. 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:

  • FindIterable

  • MongoIterable

  • MongoCursor

  • find()

Volver

Especifica qué campos se deben devolver

En esta página