Overview
En esta guía, puedes aprender cómo utilizar el driver de Scala para recuperar datos de una colección de MongoDB utilizando operaciones de lectura. Se puede llamar al método find() en una colección para recuperar documentos que coincidan con un conjunto de criterios.
Datos de muestra
Los ejemplos de esta guía utilizan la colección companies en la base de datos sample_training de los conjuntos de datos de ejemplo de Atlas. Para acceder a esta colección desde tu aplicación de Scala, crea un MongoClient que se conecte a un clúster de Atlas y asigna el siguiente valor a tus variables database y collection:
val database: MongoDatabase = mongoClient.getDatabase("sample_training") val collection: MongoCollection[Document] = database.getCollection("companies")
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.
Buscar documentos
Para recuperar documentos de una colección, utiliza el método find(). Este método toma un parámetro filtro de query y devuelve una instancia de la clase FindObservable desde la cual puedes acceder a los resultados de la query. La clase FindObservable también proporciona métodos adicionales que puedes encadenar a una instancia de FindObservable para modificar su comportamiento, como first().
Tip
Para obtener más información sobre los filtros de query, consulta la guía Especificar una consulta.
Encuentra varios documentos
Para encontrar varios documentos en una colección, pasar un filtro de query al método find() que especifique los criterios de los documentos que desea recuperar.
El método find() devuelve una instancia de FindObservable, que se puede iterar para ver los documentos coincidentes. Utilice el método subscribe() para recorrer la FindObservable.
El siguiente ejemplo utiliza el método find() para encontrar todos los documentos en los que el campo founded_year tiene el valor 1970 e imprime los resultados:
val filter = equal("founded_year", 1970) collection.find(filter).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id":{"$oid":"..."},"name":"Mitsubishi Motors","permalink":"mitsubishi-motors", "crunchbase_url":"http://www.crunchbase.com/company/mitsubishi-motors", ... } {"_id":{"$oid":"..."},"name":"Western Digital","permalink":"western-digital", "crunchbase_url":"http://www.crunchbase.com/company/western-digital", ... } {"_id":{"$oid":"..."},"name":"Celarayn","permalink":"celarayn","crunchbase_url": "http://www.crunchbase.com/company/celarayn", ... }
Nota
Encuentre todos los documentos
Para buscar todos los documentos en una colección, llamá al método find() sin pasar ningún parámetro:
collection.find()
Encuentre un documento
Para encontrar un único documento en una colección, llama al método find() y pasa un filtro de query que especifique los criterios del documento que deseas encontrar. Después, encadena el método first() con find().
El método find() devuelve una instancia de FindObservable y el método first() devuelve una instancia de SingleObserver que contiene el primer resultado de query almacenado por el FindObservable. Puede acceder al resultado SingleObserver llamando al método subscribe().
El siguiente ejemplo utiliza los métodos find() y first() para buscar el primer documento en el que el campo name tiene el valor "LinkedIn":
val filter = equal("name", "LinkedIn") collection.find(filter).first().subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "name": "LinkedIn", "permalink": "linkedin", "crunchbase_url": "http://www.crunchbase.com/company/linkedin", "homepage_url": "http://linkedin.com", ...}
Tip
Orden de clasificación
El método first() devuelve el primer documento en orden natural en el disco si no se especifica ningún criterio de ordenación.
Modificar el comportamiento de búsqueda
Puede modificar el comportamiento del método find() encadenando los métodos proporcionados por la clase FindObservable. La siguiente tabla describe algunos de estos métodos:
Método | Descripción |
|---|---|
| Explica el plan de ejecución de esta operación con el nivel de detalle especificado. |
| Establece la intercalación que se utilizará para la operación. El valor predeterminado es la intercalación especificada para la colección. |
| Adjunta un comentario a la operación. |
| Devuelve un |
| Establece el número máximo de documentos que puede devolver la operación. |
| Establece el número de documentos que se deben omitir antes de devolver los resultados. |
| Establece el orden en que la operación devuelve los documentos coincidentes. |
El siguiente ejemplo utiliza el método find() para encontrar todos los documentos en los que el campo number_of_employees tiene el valor 1000. El ejemplo usa el método limit() para devolver un máximo de 5 resultados:
val filter = equal("number_of_employees", 1000) collection.find(filter).limit(5).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, "name": "Akamai Technologies", "permalink": "akamai-technologies", "crunchbase_url": "http://www.crunchbase.com/company/akamai-technologies", "homepage_url": "http://www.akamai.com", ... } {"_id": {"$oid": "..."}, "name": "Yodle", "permalink": "yodle", "crunchbase_url": "http://www.crunchbase.com/company/yodle", "homepage_url": "http://www.yodle.com", ... } {"_id": {"$oid": "..."}, "name": "Antal International", "permalink": "antal-international", "crunchbase_url": "http://www.crunchbase.com/company/antal-international", "homepage_url": "http://antal.com", ... } {"_id": {"$oid": "..."}, "name": "Yatra online", "permalink": "yatra-online", "crunchbase_url": "http://www.crunchbase.com/company/yatra-online", "homepage_url": "http://www.Yatra.com", ... } {"_id": {"$oid": "..."}, "name": "Gumtree", "permalink": "gumtree", "crunchbase_url": "http://www.crunchbase.com/company/gumtree", "homepage_url": "http://www.gumtree.co.za", ... }
Para obtener una lista completa de los métodos de nodos de FindObservable, consulta la documentación de la API para la clase FindObservable.
Información Adicional
Para obtener más información sobre los filtros de query, consulta la guía Especificar una consulta.
Para ver ejemplos de código que recuperan documentos usando el controlador Scala, consulte Leer datos.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos mencionados en esta guía, consulta la siguiente documentación de la API: