Overview
En esta guía, aprenderá a utilizar el controlador de Rust para recuperar los valores únicos 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 Una colección tiene un valor borough de "Manhattan", y otra tiene un valor borough de "Queens". Puedes usar el controlador de Rust para recuperar los valores "Manhattan", "Queens" y todos los demás valores únicos en el campo borough en todos los documentos de la colección restaurants.
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 un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía Introducción a MongoDB.
Puede acceder a los documentos de la colección restaurants como instancias del tipo Document o de un tipo de datos personalizado. Para especificar qué tipo de datos representa los datos de la colección, reemplace el parámetro de tipo <T> con uno de los siguientes valores:
<Document>: Representa documentos de colección como documentos BSON<Restaurant>: Representa los documentos de la colección como instancias de la estructuraRestaurant, definida en los ejemplos de código.
Retrieve Distinct Values
Para recuperar los valores distintos de un campo específico, llame a distinct().método en una Collection instancia y pase el nombre del campo para el que desea encontrar valores distintos.
El distinct() método devuelve la lista de valores distintos como un Vec<Bson> objeto, un vector de valores Bson.
Recuperar valores en una colección
El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants.
Selecciona el Asynchronous o la pestaña Synchronous para ver el código correspondiente para cada entorno de ejecución:
let boroughs = my_coll.distinct("borough", None).await?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Bronx") String("Brooklyn") String("Manhattan") String("Missing") String("Queens") String("Staten Island")
let boroughs = my_coll.distinct("borough", None).run()?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Bronx") String("Brooklyn") String("Manhattan") String("Missing") String("Queens") String("Staten Island")
La operación devuelve un vector que almacena cada valor distinto del campo borough. Aunque varios documentos tengan el mismo valor en el campo borough, cada valor aparece en los resultados solo una vez.
Recuperar valores en documentos especificados
Puedes proporcionar un filtro de consulta al distinct() método para encontrar valores de campo únicos 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 comparar documentos en una operación. Por ejemplo, puedes usar el distinct() método para encontrar valores de campo únicos solo en un subconjunto de documentos coincidentes.
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 igual a "Turkish".
Seleccione la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada tiempo de ejecución:
let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter).await?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")
let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter).run()?; println!("List of field values for 'borough':"); for b in boroughs { println!("{:?}", b); }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")
Modificar el comportamiento de Distinct
Puedes modificar el comportamiento del método distinct() encadenando uno o más métodos opcionales a tu llamada count_documents() antes de la llamada al método await o run(). La siguiente tabla describe las opciones que puedes configurar para personalizar la operación distinct:
Opción | Descripción |
|---|---|
| The collation to use for the operation. Type: Collation |
| The index to use for the operation. Type: Hint |
| The comment to attach to the operation. Type: Bson |
| The maximum amount of time that the operation can run. Type: Duration |
| The read concern to use for the operation. Type: ReadConcern |
| The read preference and tags to use for the operation. Type: SelectionCriteria |
Documentación de la API
Para obtener más información sobre el método distinct(), consulte la documentación de la API.