Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Especifica los documentos a devolver

En esta guía, puedes aprender a especificar qué documentos devolver de una operación de lectura encadenando los siguientes métodos al find() :

  • limit(): Especifica el número máximo de documentos a devolver de una query.

  • sort(): Especifica el orden de clasificación para los documentos devueltos

  • skip(): Especifica el número de documentos que se deben omitir antes de devolver los resultados de la query

Los ejemplos de esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación Scala, crea un MongoClient que se conecte a un clúster Atlas y asigna los siguientes valores a tus variables database y collection:

val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.

Para especificar el número máximo de documentos devueltos en una operación de lectura, utilice el método limit() de la clase FindObservable. Después de llamar al método find(), encadene el método limit() para modificar el comportamiento de la operación.

El siguiente ejemplo encuentra todos los restaurantes que tienen un valor de campo cuisine de "Italian" y limita los resultados a 5 documentos:

val filter = equal("cuisine", "Italian")
collection.find(filter).limit(5).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Isle Of Capri Resturant", "restaurant_id": "40364373"}
{"_id": {"$oid": "..."}, ... , "name": "Marchis Restaurant", "restaurant_id": "40364668"}
{"_id": {"$oid": "..."}, ... , "name": "Crystal Room", "restaurant_id": "40365013"}
{"_id": {"$oid": "..."}, ... , "name": "Forlinis Restaurant", "restaurant_id": "40365098"}
{"_id": {"$oid": "..."}, ... , "name": "Angelo Of Mulberry St.", "restaurant_id": "40365293"}

Tip

El ejemplo anterior devuelve los primeros cinco documentos que coinciden con la consulta según su orden natural en la base de datos. La siguiente sección describe cómo retornar los documentos en un orden especificado.

Para devolver los documentos en un orden especificado, utilice el método sort() proporcionado por la clase FindObservable. Después de llamar al método find(), encadena el método sort() para modificar el comportamiento de la operación.

Al llamar a sort(), pase el campo por el que se ordenarán los resultados y la dirección de ordenación. Puede usar el método ascending() para ordenar los valores de menor a mayor, o el método descending() para ordenarlos de mayor a menor.

El siguiente ejemplo devuelve todos los documentos que tienen un valor de campo cuisine de "Italian", ordenados en orden ascendente de los valores de campo name:

val filter = equal("cuisine", "Italian")
collection.find(filter).sort(ascending("name")).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "44 Sw Ristorante & Bar", "restaurant_id": "40698807"}
{"_id": {"$oid": "..."}, ... , "name": "900 Park", "restaurant_id": "41707964"}
{"_id": {"$oid": "..."}, ... , "name": "A Voce", "restaurant_id": "41434084"}
...
{"_id": {"$oid": "..."}, ... , "name": "Zucchero E Pomodori", "restaurant_id": "41189590"}

Para omitir un número específico de documentos antes de devolver los resultados de la consulta, utilice el método skip() de la clase FindObservable. Después de llamar al método find(), encadene el método skip() para modificar el comportamiento de la operación.

El siguiente ejemplo devuelve todos los documentos que tienen un valor de campo borough de "Manhattan" y omite los primeros 10 documentos:

val filter = equal("borough", "Manhattan")
collection.find(filter).skip(10).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Cafe Metro", "restaurant_id": "40363298"}
{"_id": {"$oid": "..."}, ... , "name": "Lexler Deli", "restaurant_id": "40363426"}
{"_id": {"$oid": "..."}, ... , "name": "Domino'S Pizza", "restaurant_id": "40363644"}
...

Puedes encadenar los métodos limit(), sort() y skip() en una sola llamada al método find(). Esto le permite establecer un número máximo de documentos ordenados para devolver de la operación de lectura, omitiendo una cantidad especificada de documentos antes de devolverlos.

El siguiente ejemplo devuelve 5 documentos cuyo valor cuisine es "Italian". Los resultados se ordenan en orden ascendente según el valor del campo name, omitiendo los primeros 10 documentos:

val filter = equal("cuisine", "Italian")
collection.find(filter)
.limit(5)
.skip(10)
.sort(ascending("name"))
.subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Acqua", "restaurant_id": "40871070"}
{"_id": {"$oid": "..."}, ... , "name": "Acqua Restaurant", "restaurant_id": "41591488"}
{"_id": {"$oid": "..."}, ... , "name": "Acqua Santa", "restaurant_id": "40735858"}
{"_id": {"$oid": "..."}, ... , "name": "Acquista Trattoria", "restaurant_id": "40813992"}
{"_id": {"$oid": "..."}, ... , "name": "Acquolina Catering", "restaurant_id": "41381423"}

Nota

El orden en el que se llaman estos métodos no cambia los documentos que se devuelven. El driver de Scala reordena automáticamente las invocaciones para realizar primero la operación de ordenación, luego la operación de salto y, por último, la de límite.

Para obtener más información sobre la recuperación de documentos, consulte la Retrieve Data guide.

Para más información sobre cómo especificar una query, consulta la guía de Especificar una query.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifica un query

En esta página