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 Java Reactive Streams, você pode recuperar todos os valores distintos que um campo contém em vários documentos em uma collection.
Dados de amostra
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 Começar.
Importante
Biblioteca do Reator do Projeto
Este guia usa a biblioteca Project Reactor para consumir instâncias do Publisher
retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Project Reactor e como usá-la, consulte Introdução na documentação do Reactor. Para saber mais sobre como usamos os métodos da biblioteca do Project Reactor neste guia, consulte o guia Gravar dados no MongoDB .
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
:
DistinctPublisher<String> distinctPublisher = collection .distinct("borough", String.class); Flux.from(distinctPublisher) .doOnNext(System.out::println) .blockLast();
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 do Atlas Search usados para corresponder a documentos em uma operação. Para obter 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"
:
Bson filter = Filters.eq("cuisine", "Italian"); DistinctPublisher<String> distinctPublisher = collection .distinct("borough", String.class) .filter(filter); Flux.from(distinctPublisher) .doOnNext(System.out::println) .blockLast();
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. By default, returns an initial batch size
of 101 documents and a maximum size of 16 mebibytes (MiB) for each subsequent batch.
This option can enforce a smaller limit than 16 MiB, but not a larger one.A batchSize of 0 means that the cursor will be established, but no documents
will be returned in the first 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. |
Para obter uma lista completa de métodos que você pode usar para modificar o distinct()
método , consulte o Distinctpublisher Documentação da API.
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.
Bson filter = Filters.and( Filters.eq("borough", "Bronx"), Filters.eq("cuisine", "Pizza") ); DistinctPublisher<String> distinctPublisher = collection .distinct("name", String.class) .filter(filter) .comment("Bronx pizza restaurants"); Flux.from(distinctPublisher) .doOnNext(System.out::println) .blockLast();
$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: