Overview
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.
Documentos de muestra
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") ));
Especificar un límite
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"));
Combinando salto y límite
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: