Ler dados
Nesta página
Visão geral
Esta página contém exemplos de código copiáveis de métodos de driver do Java Reactive Streams que você pode usar para ler dados do MongoDB.
Dica
Para saber mais sobre qualquer um dos métodos mostrados nesta página, consulte o link fornecido em cada seção.
Para usar um exemplo desta página, copie o exemplo de código para oaplicativo de amostra ou para seu próprio aplicativo. Certifique-se de substituir todos os espaços reservados nos exemplos de código, como <connection string>
, pelos valores relevantes para sua implantação do MongoDB.
Implementação 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.
Há também outras maneiras de consumir instâncias do Publisher
. Você pode usar uma das muitas bibliotecas alternativas, como RxJava ou chame Publisher.subscribe()
diretamente e passe sua própria implementação de um Subscriber
.
Os exemplos deste guia usam o método Flux.blockLast()
do Reactor para assinar um Publisher
e bloquear o thread atual até que o Publisher
atinja seu estado de terminal. Para saber mais sobre a Iniciativa Reactive Streams, consulte Reactive Streams.
Importante
Os editores devolvidos estão frios
Todas as instâncias Publisher
retornadas pelos métodos do driver Java Reactive Streams estão frios, o que significa que a operação correspondente não ocorrerá a menos que você assine o Publisher
retornado. Recomendamos assinar apenas os Publisher
retornados uma vez, porque assinar mais de uma vez pode levar a erros.
Aplicativo de amostra
Você pode usar o seguinte aplicativo de exemplo para testar os exemplos de código nesta página. Para usar o aplicativo de amostra, execute as seguintes etapas:
Crie um novo projeto Java no seu IDE.
Instale o driver Java Reactive Streams em seu projeto Java .
Instale a biblioteca do Project Reactor em seu projeto Java .
Copie o código a seguir e cole-o em um novo arquivo Java chamado
ReadOperations.java
.Copie um exemplo de código desta página e cole-o nas linhas especificadas no arquivo.
1 import com.mongodb.MongoException; 2 import com.mongodb.ConnectionString; 3 import com.mongodb.MongoClientSettings; 4 import com.mongodb.ServerApi; 5 import com.mongodb.ServerApiVersion; 6 7 import com.mongodb.reactivestreams.client.MongoCollection; 8 9 import org.bson.Document; 10 11 import com.mongodb.reactivestreams.client.MongoClient; 12 import com.mongodb.reactivestreams.client.MongoClients; 13 import com.mongodb.reactivestreams.client.MongoDatabase; 14 import com.mongodb.reactivestreams.client.FindPublisher; 15 import com.mongodb.reactivestreams.client.DistinctPublisher; 16 import com.mongodb.reactivestreams.client.ChangeStreamPublisher; 17 import reactor.core.publisher.Flux; 18 19 import java.util.ArrayList; 20 import java.util.Arrays; 21 import java.util.List; 22 23 import static com.mongodb.client.model.Filters.eq; 24 25 class ReadOperations { 26 public static void main(String[] args) throws InterruptedException { 27 // Replace the placeholder with your Atlas connection string 28 String uri = "<connection string>"; 29 30 // Construct a ServerApi instance using the ServerApi.builder() method 31 ServerApi serverApi = ServerApi.builder() 32 .version(ServerApiVersion.V1) 33 .build(); 34 35 MongoClientSettings settings = MongoClientSettings.builder() 36 .applyConnectionString(new ConnectionString(uri)) 37 .serverApi(serverApi) 38 .build(); 39 40 // Create a new client and connect to the server 41 try (MongoClient mongoClient = MongoClients.create(settings)) { 42 MongoDatabase database = mongoClient.getDatabase("<database name>"); 43 MongoCollection<Document> collection = database.getCollection("<collection name>"); 44 45 // Start example code here 46 47 // End example code here 48 } 49 } 50 }
encontrar um
O exemplo a seguir recupera um documento que corresponde aos critérios especificados pelo filtro fornecido:
FindPublisher<Document> findDocPublisher = collection .find(eq("<field name>", "<value>")).first(); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre a construção do find().first()
, consulte o guiaRecuperar dados do .
Encontrar vários
O exemplo a seguir recupera todos os documentos que correspondem aos critérios especificados pelo filtro fornecido:
FindPublisher<Document> findDocPublisher = collection .find(eq("<field name>", "<value>")); Flux.from(findDocPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método find()
, consulte o guia Recuperar dados .
Contagem de documentos em uma coleção
O exemplo a seguir retorna o número de documentos na coleção especificada:
Publisher<Long> countPublisher = collection.countDocuments(); Flux.from(countPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método countDocuments()
, consulte o guia Contagem de documentos .
Contagem de documentos retornados de uma query
O exemplo a seguir retorna o número de documentos na coleção especificada que correspondem aos critérios especificados pelo filtro fornecido:
Publisher<Long> countPublisher = collection.countDocuments( eq("<field name>", "<value>")); Flux.from(countPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método countDocuments()
, consulte o guia Contagem de documentos .
Contagem estimada de documentos
O exemplo a seguir retorna um número aproximado de documentos na collection especificada com base nos metadados da collection:
Publisher<Long> countPublisher = collection.estimatedDocumentCount(); Flux.from(countPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método estimatedDocumentCount()
, consulte o guia Contagem de documentos .
Retrieve Distinct Values
O exemplo a seguir retorna todos os valores distintos do nome do campo especificado em uma determinada coleção:
DistinctPublisher<String> distinctPublisher = collection.distinct( "<field name>", <type>.class); Flux.from(distinctPublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método distinct()
, consulte o guia Retrieve Distinct Field Values (Recuperar valores de campos distintos).
Monitorar alterações de dados
O exemplo a seguir cria um change stream para uma determinada collection e imprime eventos de alteração subsequentes nessa collection:
ChangeStreamPublisher<Document> changePublisher = collection.watch(); Flux.from(changePublisher) .doOnNext(System.out::println) .blockLast();
Para saber mais sobre o método watch()
, consulte o guia Monitorar alterações de dados .