Puedes listar los valores distintos de un campo de documento en una colección llamando al método distinct() en una instancia de Collection. Por ejemplo, si los documentos de una colección incluyen el campo date, puedes usar el método distinct() para encontrar todos los valores posibles para ese campo en la colección.
Pase el nombre de un campo como parámetro al método distinct() para devolver los valores distintos de ese campo. También puede pasar un filtro de query como parámetro para encontrar valores de campo distintivos solo en un subconjunto de documentos coincidentes. Para obtener más información sobre cómo crear filtros de query, consulta la guía Especificar una query.
El método distinct() devuelve la lista de valores distintos como un tipo Vec<Bson>, un vector de valores Bson.
Ejemplo
Este ejemplo encuentra valores distintos para un campo en la colección restaurants de la base de datos sample_restaurants.
Este ejemplo encuentra valores distintos del campo borough en el subconjunto de documentos en el que el valor del campo cuisine es "Turkish".
Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada runtime:
use std::env; use mongodb::{ bson::{ Document, doc }, Client, Collection }; async fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Document> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter, None).await?; println!("List of field values for 'borough':"); for b in boroughs.iter() { println!("{:?}", b); } Ok(()) }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")
use std::env; use mongodb::{ bson::{ Document, doc }, sync::{ Client, Collection } }; fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri)?; let my_coll: Collection<Document> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "cuisine": "Turkish" }; let boroughs = my_coll.distinct("borough", filter, None)?; println!("List of field values for 'borough':"); for b in boroughs.iter() { println!("{:?}", b); } Ok(()) }
List of field values for 'borough': String("Brooklyn") String("Manhattan") String("Queens") String("Staten Island")