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.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Recuperar valores distintos de campo

En esta guía, puedes aprender a usar el driver .NET/C# para recuperar los valores únicos de un campo específico en una colección.

Dentro de una colección, diferentes documentos pueden contener diferentes valores para un mismo campo. Por ejemplo, un documento en una colección de restaurants tiene un valor borough de "Manhattan", y otro tiene un valor borough de "Queens". Al utilizar el controlador de .NET/C#, puedes recuperar todos los valores únicos que un campo contiene en múltiples documentos dentro de una colección.

Los ejemplos en esta guía utilizan la colección sample_restaurants.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, consulte Introducción al driver .NET/C#.

Los ejemplos de esta página utilizan la siguiente clase Restaurant para modelar los documentos de la colección:

public class Restaurant {
public ObjectId? Id { get; set; }
[BsonElement("name")]
public string? Name { get; set; }
[BsonElement("cuisine")]
public string? Cuisine { get; set; }
[BsonElement("borough")]
public string? Borough { get; set; }
}

Para recuperar los valores distintos de un campo especificado, llama al método Distinct() o DistinctAsync() de una instancia de IMongoCollection<TDocument> y pasa el nombre del campo para el que deseas encontrar valores distintos.

El siguiente ejemplo recupera los valores distintos del campo borough en la colección restaurants. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente.

var results = collection.Distinct<string>(r => r.Borough, Builders<Restaurant>.Filters.Empty).ToList();
foreach (var result in results)
{
Console.WriteLine(result);
}
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island
var results = await collection.DistinctAsync<string>(r => r.Borough, Builders<Restaurant>.Filters.Empty);
await results.ForEachAsync(result => Console.WriteLine(result));
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island

La operación retorna un cursor que puedes recorrer para acceder a cada valor distinto del campo borough. Aunque varios documentos tienen el mismo valor en el campo borough, cada valor aparece en los resultados solo una vez.

Puedes proporcionar un filtro de query a los métodos Distinct() y DistinctAsync() para encontrar valores de campos distintos en un subconjunto de documentos en una colección. Un filtro de query es una expresión que especifica los criterios de búsqueda utilizados para coincidir documentos en una operación. Para obtener más información sobre cómo crear un filtro de query, consulta la guía Crear un filtro de query .

El siguiente ejemplo recupera los valores distintos del campo borough para todos los documentos que tienen un valor de campo cuisine de "Italian". Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente.

var filter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Italian");
var results = collection.Distinct<string>(r => r.Borough, filter).ToList();
foreach (var result in results)
{
Console.WriteLine(result);
}
Bronx
Brooklyn
Manhattan
Queens
Staten Island
var filter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Italian");
var results = await collection.DistinctAsync<string>(r => r.Borough, filter);
await results.ForEachAsync(result => Console.WriteLine(result));
Bronx
Brooklyn
Manhattan
Queens
Staten Island

Puedes modificar el comportamiento de los métodos Distinct() y DistinctAsync() proporcionando una instancia de DistinctOptions como parámetro opcional. La siguiente tabla describe las propiedades que puede configurarse en una instancia DistinctOptions:

Método
Descripción

Collation

Sets the collation to use for the operation. See the Collation section of this page for more information.
Default: null
Data type: Collation

MaxTime

Establece el tiempo máximo que puede ejecutarse la operación.
Tipo de datos: TimeSpan

Comment

Adjunta un comentario a la operación.
Tipo de datos: BsonValue o string

El siguiente ejemplo recupera los valores distintos del campo name para todos los documentos que tienen un valor de campo borough de "Bronx" y un valor de campo cuisine de "Pizza". Luego, añade un comentario a la operación proporcionando una instancia de DistinctOptions al método Distinct().

Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente.

var cuisineFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Pizza");
var boroughFilter = Builders<Restaurant>.Filter.Eq(r => r.Borough, "Bronx");
var filter = Builders<Restaurant>.Filter.And(cuisineFilter, boroughFilter);
var options = new DistinctOptions {
Comment = "Find all Italian restaurants in the Bronx"
};
var results = collection.Distinct<string>(r => r.Name, filter).ToList();
foreach (var result in results)
{
Console.WriteLine(result);
}
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
Amici Pizza And Pasta
Angie'S Cafe Pizza
...
var cuisineFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Pizza");
var boroughFilter = Builders<Restaurant>.Filter.Eq(r => r.Borough, "Bronx");
var filter = Builders<Restaurant>.Filter.And(cuisineFilter, boroughFilter);
var options = new DistinctOptions {
Comment = "Find all Italian restaurants in the Bronx"
};
var results = await collection.DistinctAsync<string>(r => r.Name, filter, options);
await results.ForEachAsync(result => Console.WriteLine(result));
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
Amici Pizza And Pasta
Angie'S Cafe Pizza
...

Para configurar la intercalación para tu operación, crea una instancia de la clase intercalación.

La siguiente tabla describe los parámetros que acepta el constructor Collation. También enumera la propiedad de clase correspondiente que se puede usar para leer el valor de cada configuración.

Parameter
Descripción
Propiedad de clase

locale

Especifica la configuración regional de Componentes Internacionales para Unicode (ICU). Para obtener una lista de las configuraciones regionales compatibles, consulte Configuraciones regionales de intercalación y parámetros predeterminados en el Manual del servidor MongoDB.

Si desea utilizar una comparación binaria simple, utilice la Collation.Simple propiedad estática para devolver un Collation objeto con establecido locale "simple"en.
Tipo de datos: string

Locale

caseLevel

(Opcional) Especifica si se debe incluir la comparación de mayúsculas y minúsculas.

Cuando este argumento true es, el comportamiento del controlador depende del valor del strength argumento:

- Si strength CollationStrength.Primaryes, el controlador compara caracteres base y mayúsculas y minúsculas.
- Si strength CollationStrength.Secondaryes, el controlador compara caracteres base, diacríticos, otras diferencias secundarias y mayúsculas y minúsculas.
- Si strength es cualquier otro valor, este argumento se ignora.

Cuando este argumento false es, el controlador no incluye la comparación de mayúsculas y minúsculas en el nivel Primary de fuerza Secondary o.

Tipo boolean
de datos: Predeterminado: false

CaseLevel

caseFirst

(Opcional) Especifica el orden de clasificación de las diferencias de mayúsculas y minúsculas durante las comparaciones de nivel terciario.

Tipo de datos: CollationCaseFirst
Valor predeterminado: CollationCaseFirst.Off

CaseFirst

strength

(Opcional) Especifica el nivel de comparación a realizar, tal como se define en la documentación de la UCI.

Tipo de datos: CollationStrength
Valor predeterminado: CollationStrength.Tertiary

Strength

numericOrdering

(Opcional) Especifica si el controlador compara las cadenas numéricas como números.

Si este argumento true es, el controlador compara las cadenas numéricas como números. Por ejemplo, al comparar las cadenas "10" y "2", el controlador trata los valores como 10 2y, y encuentra 10 que es mayor.

Si este argumento es false o se excluye, el controlador compara las cadenas numéricas como cadenas. Por ejemplo, al comparar las cadenas "10" y "2", el controlador compara un carácter a la vez. Como "1" es menor que "2", el controlador encuentra10que " " es menor que "2".

Para obtener más información, consulte Restricciones de intercalación en el manual del servidor MongoDB.

Tipo de datos: boolean
Predeterminado: false

NumericOrdering

alternate

(Opcional) Especifica si el controlador considera los espacios en blanco y la puntuación como caracteres base para fines de comparación.

Tipo de datos: CollationAlternate
Valor predeterminado: CollationAlternate.NonIgnorable (los espacios y la puntuación se consideran caracteres base)

Alternate

maxVariable

(Opcional) Especifica qué caracteres considera el controlador como ignorables cuando el alternate argumento CollationAlternate.Shifted es.

Tipo de datos: CollationMaxVariable
Valor predeterminado: CollationMaxVariable.Punctuation (el controlador ignora la puntuación y los espacios)

MaxVariable

normalization

(Opcional) Especifica si el controlador normaliza el texto según sea necesario.

La mayoría del texto no requiere normalización. Para obtener más información sobre la normalización, consulte la documentación de ICU.

Tipo de datos: boolean
Predeterminado: false

Normalization

backwards

(Opcional) Especifica si las cadenas que contienen diacríticos se ordenan desde el final de la cadena hacia el principio.

Tipo de datos: boolean
Valor predeterminado: false

Backwards

Más información sobre la intercalación en la página Intercalación en el manual de MongoDB Server.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: