Overview
En esta guía, puedes aprender a especificar qué documentos devolver de una operación de lectura utilizando los siguientes métodos:
limit(): Especifica el número máximo de documentos que se pueden devolver de una querysort()Especifica el orden de clasificación para los documentos devueltosskip(): Especifica la cantidad de documentos a omitir antes de devolver los resultados de la query
Datos de muestra
Los ejemplos de esta guía usan la colección restaurants en la base de datos sample_restaurants de la conjuntos de datos de muestra de Atlas. Para aprender a crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de ejemplo, consulta la guía de MongoDB Get Started.
Los documentos de esta colección están modelados por la siguiente clase de datos Kotlin:
data class Restaurant( val name: String, val borough: String, val cuisine: String )
Limit
Para especificar el número máximo de documentos devueltos de una operación de lectura, llama al método limit().
El siguiente ejemplo encuentra todos los restaurantes que tienen un valor de campo cuisine de "Italian" y limita los resultados a 5 documentos:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .limit(5) results.forEach { result -> println(result) }
Restaurant(name=Philadelphia Grille Express, borough=Brooklyn, cuisine=Italian) Restaurant(name=Isle Of Capri Resturant, borough=Manhattan, cuisine=Italian) Restaurant(name=Marchis Restaurant, borough=Manhattan, cuisine=Italian) Restaurant(name=Crystal Room, borough=Staten Island, cuisine=Italian) Restaurant(name=Forlinis Restaurant, borough=Manhattan, cuisine=Italian)
Tip
El ejemplo anterior devuelve los primeros cinco documentos que devuelve la query en orden natural. La siguiente sección describe cómo devolver los documentos en un orden de clasificación especificado.
Sort
Para devolver los documentos en un orden específico, llame al método sort(). El método sort() toma como parámetro la dirección de ordenación. Para especificarla, utilice los métodos Sorts.ascending() o Sorts.descending(). El método Sorts.ascending() ordena los valores de menor a mayor, y el método Sorts.descending() los ordena de mayor a menor. Si no especifica una dirección de ordenación, sort() devuelve los documentos en orden ascendente.
El siguiente ejemplo devuelve todos los documentos con un valor del campo cuisine de "Italian", ordenados por el valor del campo name en orden ascendente:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .sort(Sorts.ascending(Restaurant::name.name)) results.forEach { result -> println(result) }
Restaurant(name=(Lewis Drug Store) Locanda Vini E Olii, borough=Brooklyn, cuisine=Italian) Restaurant(name=101 Restaurant And Bar, borough=Brooklyn, cuisine=Italian) Restaurant(name=44 Sw Ristorante & Bar, borough=Manhattan, cuisine=Italian) Restaurant(name=900 Park, borough=Bronx, cuisine=Italian) Restaurant(name=A Voce, borough=Manhattan, cuisine=Italian) ...
Omitir
Para omitir una cantidad especificada de documentos antes de devolver los resultados de tu query, llama al método skip() y pasa la cantidad de documentos a omitir. El método skip() ignora la cantidad especificada de documentos en los resultados de tu query y devuelve el resto.
El siguiente ejemplo devuelve todos los documentos que tienen un valor de campo cuisine de "Italian" y omite los primeros 10 documentos:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .skip(10) results.forEach { result -> println(result) }
Restaurant(name=San Pietro, borough=Manhattan, cuisine=Italian) Restaurant(name=Manetta's Ristorante, borough=Queens, cuisine=Italian) Restaurant(name=Salvi Restaurant, borough=Brooklyn, cuisine=Italian) Restaurant(name=Tommaso Restaurant, borough=Brooklyn, cuisine=Italian) Restaurant(name=Da Rosina Restaurant, borough=Manhattan, cuisine=Italian) ...
Combine Limit, Sort y Skip
Puedes combinar los métodos limit(), sort() y skip() en una sola operación. Esto permite establecer un número máximo de documentos ordenados para devolver, omitiendo un número especificado de documentos antes de la devolución.
El siguiente ejemplo devuelve documentos con el valor del campo cuisine igual a "Italian". Los resultados se ordenan alfabéticamente, omitiendo los primeros 10 documentos y limitando los resultados a 5 documentos:
val results = collection .find(eq(Restaurant::cuisine.name, "Italian")) .sort(Sorts.ascending(Restaurant::name.name)) .skip(10) .limit(5) results.forEach { result -> println(result) }
Restaurant(name=Acqua, borough=Manhattan, cuisine=Italian) Restaurant(name=Acqua Restaurant, borough=Manhattan, cuisine=Italian) Restaurant(name=Acqua Santa, borough=Brooklyn, cuisine=Italian) Restaurant(name=Acquista Trattoria, borough=Queens, cuisine=Italian) Restaurant(name=Acquolina Catering, borough=Manhattan, cuisine=Italian)
Nota
El orden en el que se llaman estos métodos no cambia los documentos que se devuelven. El controlador reordena automáticamente las llamadas para realizar primero las operaciones de ordenar y omitir, y la operación de límite después.
Información Adicional
Para más información sobre cómo especificar una query, ver Especifica una query.
Para más información sobre cómo recuperar documentos, visita Buscar documentos.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: