Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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 una colección restaurants tiene un valor borough de "Manhattan", y otro tiene un valor borough de "Queens". Puedes utilizar el controlador 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 en esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los 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 muestra, consulta la guía MongoDB Primeros Pasos.

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 al método distinct() en una instancia de Collection y pasa 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 la pestaña Asynchronous o Synchronous para ver el código correspondiente para cada runtime:

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 aprender más sobre cómo crear un filtro de query, consulta la 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()

La intercalación que se utilizará para la operación.
Tipo: Collation

hint()

El índice que se utilizará para la operación.
Tipo: Hint

comment()

El comentario que se va a adjuntar a la operación.
Tipo: Bson

max_time()

La cantidad máxima de tiempo que la operación puede ejecutarse.
Tipo: Duration

read_concern()

El nivel de consistencia de lectura que se utilizará para la operación.
Tipo: ReadConcern

selection_criteria()

La preferencia de lectura y las etiquetas que se usarán para la operación.
Tipo: SelectionCriteria

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