Visão geral
Dentro de uma coleção, documentos diferentes podem conter valores diferentes para um único campo. Por exemplo, um documento na coleção restaurant tem um valor borough de "Manhattan" e outro tem um valor borough de "Queens". Com o driver Kotlin Sync, você pode recuperar todos os valores distintos que um campo contém em vários documentos em uma coleção.
Dados de amostra
Os exemplos neste guia utilizam a coleção do restaurants no banco de dados de dados do sample_restaurants a partir 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 o guia Iniciar com Atlas .
A seguinte classe de dados Kotlin modela os documentos nesta coleção:
data class Restaurant(     val name: String,     val borough: String,     val cuisine: String ) 
distinct() Método
Para recuperar os valores distintos para um campo especificado, chame o método distinct() e passe o nome do campo para o qual você deseja encontrar valores distintos.
Recuperar valores distintos em uma collection
O exemplo seguinte recupera os valores distintos do campo borough na coleção restaurants :
val results = collection.distinct<String>(Restaurant::borough.name) results.forEach { result ->     println(result) } 
Bronx Brooklyn Manhattan Missing Queens Staten Island 
Os resultados mostram cada valor distinto que aparece no campo borough em todos os documentos da coleção. Embora vários documentos tenham o mesmo valor no campo borough , cada valor aparece nos resultados apenas uma vez.
Recuperar valores distintos em documentos especificados
Você pode fornecer um filtro de query para o método distinct() para localizar os valores de campo distintos em 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 mais informações sobre como criar um filtro de query, consulte 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":
val results = collection.distinct<String>(     Restaurant::borough.name,     eq(Restaurant::cuisine.name, "Italian") ) results.forEach { result ->     println(result) } 
Bronx Brooklyn Manhattan Queens Staten Island 
Modificar comportamento distinto
O método distinct() pode ser modificado encadeando métodos à chamada de método distinct() . Se você não especificar nenhuma opção, o driver não personalizará a operação.
A tabela seguinte descreve alguns métodos que você pode utilizar para personalizar a operação do distinct() :
| Método | Descrição | 
|---|---|
| 
 | Sets the number of documents to return per batch. | 
| 
 | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. | 
| 
 | Specifies a comment to attach to the operation. | 
| 
 | Sets the query filter to apply to the query. | 
| 
 | Performs the given action on each element returned by the  distinct()operation. | 
Para obter uma lista completa de métodos que você pode usar para modificar o método distinct(), consulte a documentação da API DistinctIterable.
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". Ele também usa a opção comment para adicionar um comentário à operação.
val results = collection.distinct<String>(     Restaurant::name.name,     and(         eq(Restaurant::borough.name, "Bronx"),         eq(Restaurant::cuisine.name, "Pizza")     ) ).comment("Bronx pizza restaurants") results.forEach { result ->     println(result) } 
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant ... 
Informações adicionais
Para saber mais sobre o comando distinct, consulte o guia Distinct no manual do MongoDB Server .
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: