Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Recuperar valores distintos de campo

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.

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 struct Restaurant, definido en los ejemplos de código

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.

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.

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")

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

collation()

The collation to use for the operation.
Type: Collation

hint()

The index to use for the operation.
Type: Hint

comment()

The comment to attach to the operation.
Type: Bson

max_time()

The maximum amount of time that the operation can run.
Type: Duration

read_concern()

The read concern to use for the operation.
Type: ReadConcern

selection_criteria()

The read preference and tags to use for the operation.
Type: SelectionCriteria

Para obtener más información sobre el método distinct(), consulte la documentación de la API.

Volver

Contabilizar documentos

En esta página