Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/ / /

Recuperar valores de campo distintos

Nesta página

  • Visão geral
  • Dados de amostra
  • Retrieve Distinct Values
  • Recuperar valores em uma collection
  • Recuperar valores em documentos especificados
  • Modificar comportamento distinto
  • Documentação da API

Neste guia, você pode aprender como usar o Driver .NET/C# para recuperar os valores distintos de um campo especificado em uma coleção.

Dentro de uma coleção, documentos diferentes podem conter valores diferentes para um único campo. Por exemplo, um documento em uma coleção restaurants tem um valor borough de "Manhattan" e outro tem um valor borough de "Queens". Ao usar o driver .NET/C#, você pode recuperar todos os valores exclusivos que um campo contém em vários documentos em uma coleção.

Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o Início rápido.

Os exemplos nesta página utilizam a seguinte classe Restaurant para modelar os documentos na coleção:

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 os valores distintos para um campo especificado, chame o método Distinct() ou DistinctAsync() de uma instância do IMongoCollection<TDocument> e passe o nome do campo para o qual você deseja encontrar valores distintos.

O exemplo a seguir recupera os valores distintos do campo borough na coleção restaurants. Selecione a aba Asynchronous ou Synchronous para ver o código correspondente.

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

A operação retorna um cursor que você pode iterar para acessar cada valor de campo borough distinto. Embora vários documentos tenham o mesmo valor no campo borough, cada valor aparece nos resultados apenas uma vez.

Você pode fornecer um filtro de query para os Distinct() DistinctAsync() métodos e para encontrar valores de campo distintos dentro de um subconjunto de documentos em uma coleção. Um filtro de query é uma expressão que especifica os critérios de pesquisa usados para corresponder a documentos em uma operação. Para obter mais informações sobre como criar um filtro de query, consulte o guia Especificar uma query.

O exemplo a seguir recupera os valores distintos do campo borough para todos os documentos que têm um valor de campo cuisine de "Italian". Selecione a aba Asynchronous ou Synchronous para ver o código correspondente.

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

Você pode modificar o comportamento dos métodos Distinct() e DistinctAsync() fornecendo uma instância do DistinctOptions como um parâmetro opcional. A tabela seguinte descreve as propriedades que você pode configurar em uma instância do DistinctOptions :

Método
Descrição

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

O exemplo a seguir recupera os valores distintos do campo name para todos os documentos que têm um valor de campo borough de "Bronx" e um valor de campo cuisine de "Pizza". Em seguida, ele adiciona um comentário à operação fornecendo uma instância DistinctOptions para o método Distinct().

Selecione a aba Asynchronous ou Synchronous para ver o código correspondente.

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 saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Contagem de documentos