Docs Menu
Docs Home
/ /

Recuperar valores distintos de campo

En esta guía, puede aprender a utilizar el controlador .NET/C# para recuperar los distintos valores de un campo específico en una colección.

Dentro de una colección, diferentes documentos pueden contener distintos valores para un mismo campo. Por ejemplo, un documento en una restaurants Una colección tiene un valor borough de "Manhattan" y otra tiene un valor borough de "Queens". Con el controlador .NET/C#, puede recuperar todos los valores únicos que contiene un campo en varios documentos de una colección.

Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de 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 Inicio rápido.

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 específico, llame al método Distinct() o DistinctAsync() de una instancia IMongoCollection<TDocument> y pase el nombre del campo para el cual desea encontrar valores distintos.

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

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

La operación devuelve un cursor que se puede recorrer iterativamente para acceder a cada valor del campo borough. Aunque varios documentos tengan el mismo valor en el campo borough, cada valor aparece solo una vez en los resultados.

Puede aplicar un filtro de consulta a los Distinct() DistinctAsync() métodos y para encontrar valores de campo distintos dentro de un subconjunto de documentos de una colección. Un filtro de consulta es una expresión que especifica los criterios de búsqueda utilizados para encontrar coincidencias entre documentos en una operación. Para obtener más información sobre cómo crear un filtro de consulta, consulte la guía "Especificar una consulta".

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

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

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

Método
Descripción

Collation

Sets the collation to use for the operation.
Data type: Collation

MaxTime

Sets the maximum amount of time that the operation can run.
Data type: TimeSpan

Comment

Attaches a comment to the operation.
Data type: BsonValue or string

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

Seleccione la pestaña Asynchronous o Synchronous 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 = 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
...
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
...

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

Volver

Contabilizar documentos

En esta página