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

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

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 executar.
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);
}
$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 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

Especifica a locale Componentes internacionais para Unicode (ICU). Para obter uma lista de localidades suportadas, consulte Localidades de Agrupamento e Parâmetros Padrão no Manual do MongoDB Server .

Se você quiser usar a comparação binária simples, use a Collation.Simple propriedade estática para retornar um Collation objeto com o locale definido "simple" como.
Tipo de dados: string

Locale

caseLevel

(Opcional) Especifica se incluir comparação de caso.

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

- Se strength CollationStrength.Primaryfor, o driver compara caracteres básicos e maiúsculas e minúsculas.
- strength Se CollationStrength.Secondary for, 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, esse argumento será ignorado.

Quando esse argumento false é, o driver não inclui comparação de caso no nível de força Primary Secondaryou.

Tipo de Dados: boolean
Padrão: false

CaseLevel

caseFirst

(Opcional) Especifica a ordem de classificação das diferenças de caso durante as comparações de nível terciário.

Tipo de dados: CollationCaseFirst
padrão: CollationCaseFirst.Off

CaseFirst

strength

(Opcional) Especifica o nível de comparação a ser executado, conforme definido na documentação da ICU.

Tipo de Dados: CollationStrength
Padrão: 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 e 2 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. Como "1" é menor que "2", o driver acha que "10" é 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

(Opcional) Especifica se o driver considera o espaço em branco e a pontuação como caracteres básicos para fins de comparação.

Tipo de dados: CollationAlterne
padrão: CollationAlternate.NonIgnorable (espaços e pontuação são considerados caracteres básicos)

Alternate

maxVariable

(Opcional) Especifica quais caracteres o driver considera ignoráveis quando o alternate argumento CollationAlternate.Shifted é.

Tipo de Dados: CollationMaxVariable
Padrão: CollationMaxVariable.Punctuation (o driver ignora pontuação e espaços)

MaxVariable

normalization

(Opcional) Especifica se o driver normaliza o texto conforme necessário.

A maioria dos textos não exige normalização. Para obter mais informações sobre normalização, consulte a documentação da ICU.

Tipo de dados: boolean
Padrão: false

Normalization

backwards

(Opcional) Especifica se as strings contendo diacríticos são classificadas 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: