Retrieve Data
Nesta página
Visão geral
Neste guia, você pode aprender como usar o MongoDB Java Reactive Streams Driver para recuperar dados de uma coleção MongoDB usando operações de leitura.
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 gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o Introdução.
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 .
Encontrar documentos
O driver Java Reactive Streams inclui um método para recuperar documentos de uma collection: find()
.
Este método usa um filtro de query e retorna um ou mais documentos correspondentes. Um filtro de query é um objeto que especifica os documentos que você deseja recuperar em sua query.
Para saber mais sobre filtros de query, consulte o guia Especificar uma query .
Encontrar um documento
Para localizar um único documento em uma coleção, encadeie o método first()
à sua chamada de método find()
e passe um filtro de query para a chamada de método find()
que especifica os critérios do documento que você deseja localizar. Se mais de um documento corresponder ao filtro de query, a construção find().first()
retornará o primeiro documento correspondente dos resultados recuperados. Se nenhum documento corresponder ao filtro de query, a construção retornará None
.
Dica
A construção find().first()
é útil quando você sabe que há apenas um documento correspondente ou se está interessado apenas na primeira correspondência.
O exemplo a seguir usa a construção find().first()
para localizar o primeiro documento em que o campo "cuisine"
tem o valor "Bakery"
:
Publisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Bakery")).first(); Mono.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
Dica
Ordem de classificação
Se você não especificar uma ordem de classificação, a construção find().first()
retornará o primeiro documento em ordem natural no disco.
Para saber mais sobre classificação, consulte o guia Especificar Documentos para Devolver .
Localizar vários documentos
Para encontrar vários documentos em uma coleção, passe um filtro de queries para o método find()
que especifica os critérios dos documentos que você deseja recuperar.
O exemplo seguinte utiliza o método find()
para localizar todos os documentos onde o campo "cuisine"
tem o valor "Spanish"
:
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Spanish")); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
Observação
Localizar todos os documentos
Para encontrar todos os documentos em uma coleção, não passe parâmetros para o método find()
:
Publisher<Document> findAllPublisher = restaurants.find(); Flux.from(findAllPublisher) .doOnNext(System.out::println) .blockLast();
Modificar comportamento de localização
Você pode modificar o comportamento do método find()
encadeando outros métodos a ele. A tabela a seguir descreve os métodos comumente usados:
Argument | Descrição |
---|---|
batchSize(int batchSize) | Limits the number of documents to hold in a cursor at a given time. To
learn more about cursors, see cursor in the MongoDB Server documentation. |
collation(Collation collation) | Sets the collation options as an instance of the Collation class. |
comment(String comment) | Attaches a string to the query. This can help you trace and interpret the
operation in the server logs and in profile data. To learn more about query comments,
see the $comment page. |
hint(Bson hint) | Gets or sets the index to scan for documents.
For more information, see the hint statement
in the MongoDB Server manual. |
maxTime(long maxTime, TimeUnit timeUnit) | Sets the maximum execution time on the server for this operation. If this time is
exceeded, the Java Reactive Streams driver aborts the operation and raises an ExecutionTimeout . |
O exemplo seguinte utiliza o método find()
para localizar todos os documentos onde o campo "cuisine"
tem o valor "Italian"
e define um tempo máximo de execução de 10 segundos:
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Italian")).maxTime(10L, TimeUnit.SECONDS); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
Para obter uma lista completa dos argumentos disponíveis, consulte a documentação da API para a FindPublisher
interface .
Informações adicionais
Para saber mais sobre filtros de query, consulte o guia Especificar uma query .
Para obter exemplos de código executáveis de recuperação de documentos usando o driver Java Reactive Streams, consulte o guia Ler dados do MongoDB .
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: