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.
Visão geral
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.
Implementação do Reator do Projeto
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.
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
IndexApp.java
.Copie um exemplo de código desta página e cole-o nas linhas especificadas no arquivo.
1 import com.mongodb.ConnectionString; 2 import com.mongodb.MongoClientSettings; 3 import com.mongodb.ServerApi; 4 import com.mongodb.ServerApiVersion; 5 6 import com.mongodb.client.model.ClusteredIndexOptions; 7 import com.mongodb.client.model.CreateCollectionOptions; 8 import com.mongodb.client.model.IndexOptions; 9 import com.mongodb.client.model.Indexes; 10 import com.mongodb.reactivestreams.client.*; 11 import org.bson.Document; 12 import org.reactivestreams.Publisher; 13 import reactor.core.publisher.Flux; 14 import reactor.core.publisher.Mono; 15 16 public 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 }
Índice de campo único
O exemplo seguinte cria um índice ascendente no campo especificado:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name>")); Mono.from(publisher).block();
Índice composto
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();
Multikey Index
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();
Índice Geoespacial
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();
índice único
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();
Índice curinga
O exemplo seguinte cria um índice curinga na coleção especificada:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("$**")); Mono.from(publisher).block();
Índices clusterizados
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();
Gerenciamento do índice do Atlas Search
As seções a seguir contêm exemplos de código que descrevem como gerenciar índices de Atlas Search .
Criar Índice 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();
Listar índices de pesquisa
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();
Atualizar índices de pesquisa
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();
Excluir índices Atlas Search
O exemplo seguinte exclui um índice do Atlas Search com o nome especificado:
Publisher<Void> publisher = collection.dropIndex("<index name>"); Mono.from(publisher).block();
Text Index
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();
Excluir um índice.
O exemplo a seguir exclui um índice com o nome especificado:
Publisher<Void> publisher = collection.dropIndex("<index name>"); Mono.from(publisher).block();