Docs Menu
Docs Home
/ /

Limitar el número de resultados devueltos

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

Usar limit() Para limitar el número de documentos que devuelve una operación de lectura. 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 usa limit() con el método de instancia skip(), la omisión se aplica primero y el límite solo se aplica a los documentos restantes después de la omisión. Para obtener más información sobre el método skip(), consulte nuestra Guía sobre cómo omitir documentos devueltos.

Los siguientes ejemplos demuestran, respectivamente, cómo insertar datos en una colección, cómo usar limit() para restringir la cantidad de documentos devueltos y cómo combinar limit() con skip() para limitar aún más los resultados devueltos de una consulta.

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 consulta la colección para devolver los tres libros más largos. Primero, compara todos los documentos con la consulta y, a continuación, ordena por el campo length para devolver los libros más largos antes que los más cortos. Finalmente, 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 que se llaman limit() y sort() no importa, ya que el controlador reordena las llamadas para aplicar primero la ordenación y después el límite. Las dos llamadas siguientes son equivalentes:

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

Para ver los próximos tres libros más largos, agregue el método skip() a su 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 del cuarto al sexto libro más largo:

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}}

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

Nota

Para garantizar una ordenación estable en múltiples consultas, debe usar una clave única (como _id). De lo contrario, una llamada a skip() y limit() podría generar resultados impredecibles al combinarse con sort().

Por ejemplo, considere 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 ordena solo por type, sort() no garantiza el mismo orden al devolver los datos. Añadir skip() y limit() a sort() puede devolver documentos diferentes para distintas consultas. En este caso, ordenar por data o serial_no garantizaría una ordenación estable, ya que ambas son claves únicas.

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

  • FindIterable

  • MongoIterable

  • Cursor mongo

  • find()

Volver

Especifica qué campos se deben devolver

En esta página