Overview
En esta guía, puede aprender a utilizar el controlador Ruby para recuperar los distintos valores de un campo específico en una colección.
Dentro de una colección, los documentos pueden contener valores diferentes para un solo 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'. Puedes utilizar el driver de Ruby para 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 Ruby, cree un objeto Mongo::Client que se conecte a un clúster Atlas y asigne los siguientes valores a las variables database y collection:
database = client.use('sample_restaurants') collection = database[: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 especificado, llama al método distinct y pasa el nombre del campo para el que deseas encontrar valores distintos.
Recuperar valores en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants:
results = collection.distinct('borough') results.each do |value| puts value end
Bronx Brooklyn Manhattan Missing Queens Staten Island
La operación devuelve un arreglo que almacena cada valor distinto del campo borough. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor solo aparece una vez en los resultados.
Recuperar valores en documentos especificados
Puede aplicar un filtro de consulta al distinct método para encontrar los distintos valores de campo en un subconjunto de documentos de una colección. Un filtro de consulta es una expresión que especifica los criterios de búsqueda utilizados para encontrar coincidencias en los documentos de una operación.
Tip
Para obtener más información sobre cómo crear un filtro de query, consulta 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':
results = collection.distinct('borough', { cuisine: 'Italian' }) results.each do |value| puts value end
Bronx Brooklyn Manhattan Queens Staten Island
Modificar el comportamiento de Distinct
Se puede modificar el comportamiento del método distinct enviando un objeto Hash que especifique valores de opción. La siguiente tabla describe las opciones que se pueden establecer para personalizar la operación:
Opción | Descripción |
|---|---|
| The collation to use for the operation. Type: Hash |
| The maximum amount of time in milliseconds that the operation can run. Type: Integer |
| The read preference to use for the operation. To learn more, see
Read Preference in the MongoDB Server manual. Type: Hash |
| The session to use for the operation. Type: Session |
El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos que tienen un valor de campo borough de 'Bronx' y un valor de campo cuisine de 'Pizza'. También establece la opción read, que instruye a la operación para que use una preferencia de lectura primary_preferred:
filter = { borough: 'Bronx', cuisine: 'Pizza' } options = { read: { mode: :primary_preferred } } results = collection.distinct('name', filter, options) results.each do |value| puts value end
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza Anthony & Joe'S Pizza Anthony'S Pizza Antivari Pizza Arturo'S Pizza Bartow Pizza ...
Documentación de la API
Para obtener más información sobre el método distinct, consulta la documentación de la API.