Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Recuperar valores de campo distintos

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 MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte a Introdução ao driver .NET/C#.

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 Synchronous ou Asynchronous para ver o código correspondente.

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

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 métodos Distinct() e DistinctAsync() 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 Criar um filtro de 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 Synchronous ou Asynchronous para ver o código correspondente.

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);
}
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));

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

Define a agrupamento para utilizar para a operação. Consulte a seção Agrupamento desta página para obter mais informações.
Padrão: null
Tipo de dados: agrupamento

MaxTime

Define a quantidade máxima de tempo que a operação pode ser executada.
Tipo de dados: TimeSpan

Comment

Anexa um comentário à operação.
Tipo de dados: BsonValue ou 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 Synchronous ou Asynchronous 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 = collection.Distinct<string>(r => r.Name, filter).ToList();
foreach (var result in results)
{
Console.WriteLine(result);
}
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));

Para configurar o agrupamento para sua operação, crie uma instância da classe Agrupamento.

A tabela seguinte descreve os parâmetros que o construtor do Collation aceita. Ela também lista a propriedade de classe correspondente que você pode usar para ler o valor de cada configuração.

Parâmetro
Descrição
Propriedade de classe

locale

Specifies the International Components for Unicode (ICU) locale. For a list of supported locales, see Collation Locales and Default Parameters in the MongoDB Server Manual.

If you want to use simple binary comparison, use the Collation.Simple static property to return a Collation object with the locale set to "simple".
Data Type: string

Locale

caseLevel

(Opcional) Especifica se a comparação de caso deve ser incluída.

Quando este argumento é true, o comportamento do driver depende do valor do argumento strength:

- Se strength for CollationStrength.Primary, o driver compara caracteres básicos e maiúsculas e minúsculas.
- Se strength for CollationStrength.Secondary, o driver compara caracteres básicos, diacríticos, outras diferenças secundárias e maiúsculas e minúsculas.
- Se strength for qualquer outro valor, este argumento será ignorado.

Quando este argumento é false, o driver não inclui comparação de maiúsculas e minúsculas no nível de força Primary ou Secondary.

Tipo de dados: boolean
Padrão: false

CaseLevel

caseFirst

(Optional) Specifies the sort order of case differences during tertiary level comparisons.

Data Type: CollationCaseFirst
Default: CollationCaseFirst.Off

CaseFirst

strength

(Optional) Specifies the level of comparison to perform, as defined in the ICU documentation.

Data Type: CollationStrength
Default: CollationStrength.Tertiary

Strength

numericOrdering

(Opcional) Especifica se o driver compara strings numéricas como números.

Se esse argumento true for, o driver compara strings numéricas como números. Por exemplo, ao comparar as strings "10" e "2", o driver trata os valores como 10 2e, e considera 10 maior.

Se esse argumento for false ou excluído, o driver compara cadeias de caracteres numéricas como cadeias de caracteres. Por exemplo, ao comparar as strings "10" e "2", o driver compara um caractere de cada vez. Porque "1" é inferior a "2", o condutor encontra "10" para ser menor que "2".

Para obter mais informações, consulte Restrições de agrupamento no manual do MongoDB Server .

Tipo de Dados: boolean
Padrão: false

NumericOrdering

alternate

(Optional) Specifies whether the driver considers whitespace and punctuation as base characters for purposes of comparison.

Data Type: CollationAlternate
Default: CollationAlternate.NonIgnorable (spaces and punctuation are considered base characters)

Alternate

maxVariable

(Optional) Specifies which characters the driver considers ignorable when the alternate argument is CollationAlternate.Shifted.

Data Type: CollationMaxVariable
Default: CollationMaxVariable.Punctuation (the driver ignores punctuation and spaces)

MaxVariable

normalization

(Optional) Specifies whether the driver normalizes text as needed.

Most text doesn't require normalization. For more information about normalization, see the ICU documentation.

Data Type: boolean
Default: false

Normalization

backwards

(Opcional) Especifica se as strings que contêm diacríticos são ordenadas da parte de trás da string para a frente.

Tipo de dados: boolean
Padrão: false

Backwards

Para obter mais informações sobre agrupamento, consulte a página Agrupamento no manual do MongoDB Server.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: