Visão geral
Neste guia, você pode aprender como localizar documentos usando o Driver MongoDB Java Reactive Streams.
Dados de amostra
Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para aprender como criar um agrupamento de MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte a 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 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.
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 |
|---|---|
| O número máximo de documentos dentro de cada lote retornados em um resultado de query. Por padrão, o driver define esse valor como Um |
| Define as opções de agrupamento como uma instância da classe |
| Anexa uma string à query. Isso pode ajudá-lo a rastrear e interpretar a operação nos registros do servidor e nos dados de perfil. Para saber mais sobre comentários da query, consulte a página cursor.comment() no manual do MongoDB Server . |
| Obtém ou define o índice para procurar documentos. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server . |
O exemplo seguinte utiliza o método find() para localizar todos os documentos onde o campo "cuisine" tem o valor "Italian" e define um comentário:
FindPublisher<Document> findDocPublisher = restaurants.find( eq("cuisine", "Italian")).comment("Find operation"); 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 interface FindPublisher.
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 Query Documents .
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: