Overview
En esta guía, puede aprender a utilizar el controlador Scala para recuperar los distintos valores de un campo específico en una colección.
Dentro de una colección, diferentes documentos pueden contener diferentes valores para un mismo campo. Por ejemplo, un documento en un restaurants la colección tiene un valor borough de "Manhattan", y otra tiene un valor borough de "Queens". Al usar el driver de Scala, puedes recuperar todos los valores únicos que un campo contiene en varios documentos de una colección.
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 acceder a esta colección desde su aplicación Scala, cree un MongoClient que se conecte a un clúster de Atlas y asigne los siguientes valores a las variables database collection y:
val database: MongoDatabase = client.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.
Retrieve Distinct Values
Para recuperar los valores distintos de un campo específico, llame al método distinct() y pase el nombre del campo para el cual desea encontrar valores distintos.
Recuperar valores en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:
collection.distinct("borough") .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
Bronx Brooklyn Manhattan Missing Queens Staten Island
La operación devuelve una instancia de la clase DistinctObservable, a la que se puede acceder paso a paso para obtener cada valor distinto del campo borough. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor aparece solo una vez en los resultados.
Recuperar valores en documentos especificados
Puedes proporcionar un filtro de query al método distinct() para encontrar valores de campo distintos dentro de un subconjunto de documentos en una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para encontrar documentos en una operación. Para obtener más información sobre cómo crear un filtro de query, consulta el Guía 'Especificar una query' .
El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de "Italian":
val filter = equal("cuisine", "Italian") collection.distinct("borough", filter) .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
Bronx Brooklyn Manhattan Queens Staten Island
Modificar el comportamiento de Distinct
Puede modificar el comportamiento del método distinct() encadenando los métodos proporcionados por la clase DistinctObservable. La siguiente tabla describe algunos de estos métodos:
Método | Descripción |
|---|---|
| Sets the collation to use for the operation. Parameter Type: Collation |
| Attaches a comment to the operation. Parameter Type: BsonValue or String |
| Retrieves only the first distinct field value. |
El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos que tengan un valor de campo borough de "Bronx" y un valor de campo cuisine de "Pizza". Luego, encadena el método comment() a distinct() para agregar un comentario a la operación:
val filter = and(equal("borough", "Bronx"), equal("cuisine", "Pizza")) collection.distinct("name", filter) .comment("Bronx Pizza restaurants") .subscribe((value: String) => println(value), (e: Throwable) => println(s"There was an error: $e"))
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza ...
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: