Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/

Ler operações

Nesta página

  • Pré-requisitos
  • Conecte-se a um MongoDB deployment
  • Consultar uma Collection
  • Filtros de query
  • Filtro vazio
  • Auxiliar de filtros
  • Encontrar editor
  • Projeções
  • Tipos
  • Classificar com projeções
  • explicar
  • readPreference
  • Preocupação de leitura

As operações de leitura recuperam documentos ou informações sobre documentos de uma collection. Você pode especificar um filtro para recuperar somente os documentos que correspondam à condição do filtro.

Você deve configurar os seguintes componentes para executar os exemplos de código neste guia:

  • Uma test.restaurants coleção preenchida com documentos do restaurants.json arquivo na documentação de ativos do Github.

  • As seguintes declarações de importação:

import com.mongodb.*;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
import com.mongodb.reactivestreams.client.MongoDatabase;
import com.mongodb.client.model.Projections;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import java.util.Arrays;
import org.bson.Document;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;

Importante

Este guia usa as implementações do Subscriber , que são descritas noPrimário de início rápidodo .

Primeiro, conecte a um MongoDB deployment e, em seguida, declare e defina as instâncias MongoDatabase e MongoCollection .

O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost na porta 27017. Em seguida, define a variável database para fazer referência ao banco de dados test e a variável collection para fazer referência à coleção restaurants :

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o tutorial Conectar ao MongoDB .

Para fazer query da coleção, você pode usar o método find() da coleção.

Você pode chamar o método sem argumentos para consultar todos os documentos em uma coleção:

collection.find().subscribe(new PrintDocumentSubscriber());

Ou você pode passar um filtro para fazer query de documentos que correspondam aos critérios do filtro:

collection.find(eq("name", "456 Cookies Shop"))
.subscribe(new PrintDocumentSubscriber());

Para consultar documentos que correspondam a determinadas condições, passe um documento de filtro para o método find() .

Para especificar um filtro vazio e corresponder a todos os documentos em uma collection, use um objeto Document vazio:

collection.find(new Document()).subscribe(new PrintDocumentSubscriber());

Dica

Ao usar o método find() , você também pode chamar o método sem passar nenhum objeto de filtro para corresponder a todos os documentos em uma collection.

collection.find().subscribe(new PrintDocumentSubscriber());

Para facilitar a criação de documentos de filtro, o driver fornece a classe Filters que fornece métodos auxiliares de condição de filtro.

Esse exemplo de operação de localização inclui uma instância de filtro Document que especifica as seguintes condições:

  • stars o valor do campo é maior ou igual a 2 e menor que 5

  • categories campo é igual a "Bakery", ou se categories for um campo de array, contém a string "Bakery" como um elemento

collection.find(
new Document("stars", new Document("$gte", 2)
.append("$lt", 5))
.append("categories", "Bakery")).subscribe(new PrintDocumentSubscriber());

O exemplo a seguir especifica a mesma condição de filtro usando os métodos auxiliares Filters :

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.subscribe(new PrintDocumentSubscriber());

Para visualizar uma lista de operadores de filtro de query, consulte Operadores de query e projeção no manual do servidor MongoDB. Para ver uma lista de Filters auxiliares do , consulte a documentação da API de filtros.

O método find() retorna uma instância da interface FindPublisher . A interface fornece vários métodos que você pode encadear ao método find() para modificar a saída ou o comportamento da query, como sort() ou projection(), bem como para iterar os resultados por meio do método subscribe() .

Por padrão, as queries no MongoDB retornam todos os campos em documentos correspondentes. Para especificar os campos a serem retornados nos documentos correspondentes, você pode especificar um documento de projeção.

Este exemplo de operação de busca inclui uma projeção Document que especifica que os documentos correspondentes incluem somente os campos name, stars e categories :

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.projection(new Document("name", 1)
.append("stars", 1)
.append("categories",1)
.append("_id", 0))
.subscribe(new PrintDocumentSubscriber());

Para facilitar a criação de documentos de projeção, o driver fornece a classe Projections .

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.projection(fields(include("name", "stars", "categories"), excludeId()))
.subscribe(new PrintDocumentSubscriber());

No documento de projeção, você também pode especificar uma expressão de projeção usando um operador de projeção.

Para visualizar um exemplo que utiliza o método Projections.metaTextScore(), consulte o tutorial Atlas Searchde Texto .

Para classificar documentos, passe um documento de especificação de classificação para o método FindPublisher.sort() . O driver fornece métodos auxiliares Sorts para facilitar a criação do documento de especificação de classificação.

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.sort(Sorts.ascending("name"))
.subscribe(new PrintDocumentSubscriber());

Os métodos FindPublisher em si retornam objetos FindPublisher e, como tal, você pode anexar vários métodos FindPublisher ao método find() :

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.sort(Sorts.ascending("name"))
.projection(fields(include("name", "stars", "categories"), excludeId()))
.subscribe(new PrintDocumentSubscriber());

Para explicar uma operação de localização, chame o método FindPublisher.explain() :

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.explain()
.subscribe(new PrintDocumentSubscriber());

Para operações de leitura em conjuntos de réplicas ou clusters fragmentados, você pode configurar a preferência de leitura nos seguintes níveis:

  • Em um MongoClient das seguintes maneiras:

    • Ao criar uma instância do MongoClientSettings :

      MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString("mongodb://host1,host2"))
      .readPreference(ReadPreference.secondary())
      .build());
    • Ao criar uma instância do ConnectionString :

      MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readPreference=secondary");
  • Em um MongoDatabase usando o método withReadPreference() :

    MongoDatabase database = mongoClient.getDatabase("test")
    .withReadPreference(ReadPreference.secondary());
  • Em um MongoCollection usando o método withReadPreference() :

    MongoCollection<Document> collection = database.getCollection("restaurants")
    .withReadPreference(ReadPreference.secondary());

MongoDatabase e MongoCollection instâncias são imutáveis. Chamar withReadPreference() em uma instância MongoDatabase ou MongoCollection existente retorna uma nova instância e não afeta a instância na qual o método é chamado.

No exemplo a seguir, a instância collectionWithReadPref tem a preferência de leitura de primaryPreferred , enquanto a preferência de leitura do collection não é afetada:

MongoCollection<Document> collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred());

Para operações de leitura em conjuntos de réplicas ou clusters fragmentados, os aplicativos podem configurar a read concern nos seguintes níveis:

  • Em um MongoClient das seguintes maneiras:

    • Ao criar uma instância do MongoClientSettings :

      MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString("mongodb://host1,host2"))
      .readConcern(ReadConcern.MAJORITY)
      .build());
    • Ao criar uma instância do ConnectionString :

      MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readConcernLevel=majority");
  • Em um MongoDatabase usando o método withReadConcern() :

    MongoDatabase database = mongoClient.getDatabase("test")
    .withReadConcern(ReadConcern.MAJORITY);
  • Em um MongoCollection usando o método withReadConcern() :

    MongoCollection<Document> collection = database.getCollection("restaurants")
    .withReadConcern(ReadConcern.MAJORITY);

MongoDatabase e MongoCollection instâncias são imutáveis. Chamar withReadConcern() em uma instância MongoDatabase ou MongoCollection existente retorna uma nova instância e não afeta a instância na qual o método é chamado.

No exemplo a seguir, a instância collWithReadConcern tem um read concern AVAILABLE , enquanto a read concern do collection não é afetada:

MongoCollection<Document> collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE);

Você pode construir instâncias do MongoClientSettings, MongoDatabase ou MongoCollection para incluir combinações de read concerns, read preferences e write concerns.

Por exemplo, o seguinte código define todos os três no nível da collection:

collection = database.getCollection("restaurants")
.withReadPreference(ReadPreference.primary())
.withReadConcern(ReadConcern.MAJORITY)
.withWriteConcern(WriteConcern.MAJORITY);

Voltar

Crie índices