Overview
En esta guía, puedes aprender a utilizar el controlador de Rust para recuperar los valores distintos de un campo especificado 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 de borough de "Manhattan", y otra tiene un valor de borough de "Queens". Puede 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 en la colección restaurants como instancias del tipo Document o de un tipo de dato personalizado. Para especificar qué tipo de datos representa los datos de la colección, reemplaza el parámetro de tipo <T> por uno de los siguientes valores:
<Document>: Representa documentos de colección como documentos BSON<Restaurant>: Representa documentos de colecciones como instancias del structRestaurant, definido en los ejemplos de código
Retrieve Distinct Values
Para recuperar los valores distintos de un campo especificado, llama a la función distinct() método en una instancia de Collection y pasar el nombre del campo para el que deseas encontrar valores distintos.
El método distinct() retorna la lista de valores distintos como un objeto Vec<Bson>, un vector de Bson valores.
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
Puede proporcionar un filtro de query al método distinct() para encontrar los valores distintos de un campo en un subconjunto de documentos de una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para comparar documentos en una operación. Por ejemplo, puede utilizar el método distinct() para encontrar valores de campo distintos solo de 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".
Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada runtime:
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 de opción a tu llamada count_documents() antes de la llamada a los métodos await o run(). La siguiente tabla describe las opciones que se pueden configurar para personalizar la operación distinta:
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.