Menu Docs

Ler dados

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.

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.

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:

  1. Crie um novo projeto Java no seu IDE.

  2. Instale o driver Java Reactive Streams em seu projeto Java .

  3. Instale a biblioteca do Project Reactor em seu projeto Java .

  4. Copie o código a seguir e cole-o em um novo arquivo Java chamado ReadOperations.java.

  5. Copie um exemplo de código desta página e cole-o nas linhas especificadas no arquivo.

1import com.mongodb.MongoException;
2import com.mongodb.ConnectionString;
3import com.mongodb.MongoClientSettings;
4import com.mongodb.ServerApi;
5import com.mongodb.ServerApiVersion;
6
7import com.mongodb.reactivestreams.client.MongoCollection;
8
9import org.bson.Document;
10
11import com.mongodb.reactivestreams.client.MongoClient;
12import com.mongodb.reactivestreams.client.MongoClients;
13import com.mongodb.reactivestreams.client.MongoDatabase;
14import com.mongodb.reactivestreams.client.FindPublisher;
15import com.mongodb.reactivestreams.client.DistinctPublisher;
16import com.mongodb.reactivestreams.client.ChangeStreamPublisher;
17import reactor.core.publisher.Flux;
18
19import java.util.ArrayList;
20import java.util.Arrays;
21import java.util.List;
22
23import static com.mongodb.client.model.Filters.eq;
24
25class 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}

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 .

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 .

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 .

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 .

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 .

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).

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 .