Recuperar valores de campo distintos
Nesta página
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 Publisher
instâncias do retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Projeto 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 |
---|---|
batchSize() | Sets the number of documents to return per batch. |
collation() | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
comment() | Specifies a comment to attach to the operation. |
filter() | Sets the query filter to apply to the query. |
maxTime() | Sets the maximum amount of time to allow the operation to run, in milliseconds. |
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: