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

Otimizar consultas usando índices

Nesta página

  • Visão geral
  • Implementação do Reator do Projeto
  • Aplicativo de amostra
  • Índice de campo único
  • Índice composto
  • Multikey Index
  • Índice Geoespacial
  • índice único
  • Índice curinga
  • Índices clusterizados
  • Gerenciamento do índice do Atlas Search
  • Criar Índice de Atlas Search
  • Listar índices de pesquisa
  • Atualizar índices de pesquisa
  • Excluir índices Atlas Search
  • Text Index
  • Excluir um índice.

Nesta página, você pode ver exemplos de código copiáveis que mostram como gerenciar diferentes tipos de índices usando o driver Java Reactive Streams.

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 URI>, pelos valores relevantes para sua implantação do MongoDB.

Este guia usa a biblioteca Project Reactor para consumir Publisher instâncias do 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.

Este guia usa o método Mono.block() 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 IndexApp.java.

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

1import com.mongodb.ConnectionString;
2import com.mongodb.MongoClientSettings;
3import com.mongodb.ServerApi;
4import com.mongodb.ServerApiVersion;
5
6import com.mongodb.client.model.ClusteredIndexOptions;
7import com.mongodb.client.model.CreateCollectionOptions;
8import com.mongodb.client.model.IndexOptions;
9import com.mongodb.client.model.Indexes;
10import com.mongodb.reactivestreams.client.*;
11import org.bson.Document;
12import org.reactivestreams.Publisher;
13import reactor.core.publisher.Flux;
14import reactor.core.publisher.Mono;
15
16public class IndexApp {
17 public static void main(String[] args) {
18 // Replace the placeholder with your Atlas connection string
19 String uri = "<connection string URI>";
20
21 // Construct a ServerApi instance using the ServerApi.builder() method
22 ServerApi serverApi = ServerApi.builder()
23 .version(ServerApiVersion.V1)
24 .build();
25
26 MongoClientSettings settings = MongoClientSettings.builder()
27 .applyConnectionString(new ConnectionString(uri))
28 .serverApi(serverApi)
29 .build();
30
31 // Create a new client and connect to the server
32 try (MongoClient mongoClient = MongoClients.create(settings)) {
33 MongoDatabase database = mongoClient.getDatabase("<database name>");
34 MongoCollection<Document> collection = database.getCollection("<collection name>");
35
36 // Start example code here
37
38 // End example code here
39 }
40 }
41}

O exemplo seguinte cria um índice ascendente no campo especificado:

Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name>"));
Mono.from(publisher).block();

O exemplo seguinte cria um índice composto nos campos especificados:

Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name 1>", "<field name 2>"));
Mono.from(publisher).block();

O exemplo a seguir cria um índice de múltiplas chaves no campo com valor de array especificado:

Publisher<String> publisher = collection.createIndex(Indexes.ascending("<array field name>"));
Mono.from(publisher).block();

O exemplo seguinte cria um índice 2dsphere no campo especificado que contém objetos GeoJSON:

Publisher<String> publisher = collection.createIndex(Indexes.geo2dsphere("<GeoJSON object field>"));
Mono.from(publisher).block();

O exemplo seguinte cria um índice único no campo especificado:

IndexOptions indexOptions = new IndexOptions().unique(true);
Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name>"), indexOptions);
Mono.from(publisher).block();

O exemplo seguinte cria um índice curinga na coleção especificada:

Publisher<String> publisher = collection.createIndex(Indexes.ascending("$**"));
Mono.from(publisher).block();

O exemplo seguinte cria uma nova coleção com um índice agrupado no campo _id :

ClusteredIndexOptions clusteredIndexOptions = new ClusteredIndexOptions(
Indexes.ascending("_id"),
true
);
CreateCollectionOptions createCollectionOptions= new CreateCollectionOptions()
.clusteredIndexOptions(clusteredIndexOptions);
Publisher<Void> clusteredCollection = database.createCollection("<collection name>",
createCollectionOptions);
Mono.from(clusteredCollection).block();

As seções a seguir contêm exemplos de código que descrevem como gerenciar índices de Atlas Search .

O exemplo seguinte cria um índice do Atlas Search no campo especificado:

Document index = new Document("mappings", new Document("dynamic", true));
Publisher<String> publisher = collection.createSearchIndex("<index name>", index);
Mono.from(publisher).block();

O exemplo abaixo imprime uma lista de índices do Atlas Search na collection especificada:

ListSearchIndexesPublisher<Document> listIndexesPublisher = collection.listSearchIndexes();
Flux.from(listIndexesPublisher)
.doOnNext(System.out::println)
.blockLast();

O exemplo seguinte atualiza um índice do Atlas Search existente com a nova definição de índice especificada:

Document newIndex = new Document("mappings", new Document("dynamic", true));
Publisher<Void> publisher = collection.updateSearchIndex("<index name>", newIndex);
Mono.from(publisher).block();

O exemplo seguinte exclui um índice do Atlas Search com o nome especificado:

Publisher<Void> publisher = collection.dropIndex("<index name>");
Mono.from(publisher).block();

O exemplo seguinte cria um índice de texto no campo de string especificado:

Publisher<String> publisher = collection.createIndex(Indexes.text("<field name>"));
Mono.from(publisher).block();

O exemplo a seguir exclui um índice com o nome especificado:

Publisher<Void> publisher = collection.dropIndex("<index name>");
Mono.from(publisher).block();

Voltar

Monitorar alterações de dados