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 no aplicativo de amostra ou em 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 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 chamar Publisher.subscribe() diretamente e passar 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 Projeto 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.
import com.mongodb.ConnectionString;import com.mongodb.MongoClientSettings;import com.mongodb.ServerApi;import com.mongodb.ServerApiVersion;
import com.mongodb.client.model.ClusteredIndexOptions;import com.mongodb.client.model.CreateCollectionOptions;import com.mongodb.client.model.IndexOptions;import com.mongodb.client.model.Indexes;import com.mongodb.reactivestreams.client.*;import org.bson.Document;import org.reactivestreams.Publisher;import reactor.core.publisher.Flux;import reactor.core.publisher.Mono;
public class IndexApp { public static void main(String[] args) { // Replace the placeholder with your Atlas connection string String uri = "<connection string URI>";
// Construct a ServerApi instance using the ServerApi.builder() method ServerApi serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .build();
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString(uri)) .serverApi(serverApi) .build();
// Create a new client and connect to the server try (MongoClient mongoClient = MongoClients.create(settings)) { MongoDatabase database = mongoClient.getDatabase("<database name>"); MongoCollection<Document> collection = database.getCollection("<collection name>");
// Start example code here
// End example code here } }}Í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 de pesquisa do MongoDB
As seções a seguir contêm exemplos de código que descrevem como gerenciar índices de pesquisa MongoDB .
Criar Índice de Atlas Search
O exemplo a seguir cria um índice de pesquisa do MongoDB 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 a seguir imprime uma lista de índices de pesquisa do MongoDB na coleção especificada:
ListSearchIndexesPublisher<Document> listIndexesPublisher = collection.listSearchIndexes();
Flux.from(listIndexesPublisher) .doOnNext(System.out::println) .blockLast();Atualizar índices de pesquisa
O exemplo a seguir atualiza um índice de pesquisa do MongoDB 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 a seguir excluir um índice de pesquisa do MongoDB 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();