Overview
En esta página, puede ver ejemplos de código copiables que muestran cómo administrar diferentes tipos de índices mediante el controlador Java Reactive Streams.
Para utilizar un ejemplo de esta página, copie el ejemplo de código en el
Aplicación de ejemplo o su propia aplicación. Asegúrese de reemplazar todos los marcadores de posición en los ejemplos de código, como <connection string URI>, con los valores relevantes para su implementación de MongoDB.
Implementación del Proyecto Reactor
Esta guía utiliza la biblioteca Project Reactor para consumir Publisher las instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte la sección "Introducción" en la documentación de Reactor.
También hay otras formas de consumir Publisher instancias. Puedes usar una de las muchas bibliotecas alternativas, como RxJava, o llamar Publisher.subscribe() directamente a y pasar tu propia implementación de Subscriber un.
Esta guía utiliza el Mono.block() método de Reactor para suscribirse a un Publisher y bloquear el hilo actual hasta que el Publisher alcance su estado terminal. Para obtener más información sobre la iniciativa Reactive Streams, consulte Reactive Streams.
Importante
Los editores que regresaron son fríos
Todas las instancias de Publisher devueltas por los métodos del controlador de Java Reactive Streams son frías, lo que significa que la operación correspondiente no ocurre a menos que se suscriba al Publisher devuelto. Recomendamos suscribirse solo una vez al Publisher devuelto, porque suscribirse más de una vez puede provocar errores.
Aplicación de muestra
Puede utilizar la siguiente aplicación de muestra para probar los ejemplos de código en esta página. Para usar la aplicación de muestra, siga los siguientes pasos:
Crea un nuevo proyecto Java en tu IDE.
Instale el controlador Java Reactive Streams en su proyecto Java.
Instale la biblioteca Project Reactor en su proyecto Java.
Copie el siguiente código y péguelo en un nuevo archivo Java llamado
IndexApp.java.Copia un ejemplo de código de esta página y pégalo en las líneas especificadas del archivo.
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 un solo campo
El siguiente ejemplo crea un índice ascendente en el campo especificado:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name>")); Mono.from(publisher).block();
Índice compuesto
El siguiente ejemplo crea un índice compuesto en los campos especificados:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name 1>", "<field name 2>")); Mono.from(publisher).block();
Multikey Index
El siguiente ejemplo crea un índice multiclave en el campo con valor de matriz especificado:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("<array field name>")); Mono.from(publisher).block();
Índice geoespacial
El siguiente ejemplo crea un índice 2dsphere en el campo especificado que contiene objetos GeoJSON:
Publisher<String> publisher = collection.createIndex(Indexes.geo2dsphere("<GeoJSON object field>")); Mono.from(publisher).block();
Índice único
El siguiente ejemplo crea un índice único en el campo especificado:
IndexOptions indexOptions = new IndexOptions().unique(true); Publisher<String> publisher = collection.createIndex(Indexes.ascending("<field name>"), indexOptions); Mono.from(publisher).block();
Índice de comodines
El siguiente ejemplo crea un índice comodín en la colección especificada:
Publisher<String> publisher = collection.createIndex(Indexes.ascending("$**")); Mono.from(publisher).block();
Índice del clúster
El siguiente ejemplo crea una nueva colección con un índice agrupado en el 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();
Gestión del índice de búsqueda de MongoDB
Las siguientes secciones contienen ejemplos de código que describen cómo administrar los índices de búsqueda de MongoDB.
Crear índice de búsqueda
El siguiente ejemplo crea un índice de búsqueda de MongoDB en el campo especificado:
Document index = new Document("mappings", new Document("dynamic", true)); Publisher<String> publisher = collection.createSearchIndex("<index name>", index); Mono.from(publisher).block();
Índices de búsqueda de listas
El siguiente ejemplo imprime una lista de índices de búsqueda de MongoDB en la colección especificada:
ListSearchIndexesPublisher<Document> listIndexesPublisher = collection.listSearchIndexes(); Flux.from(listIndexesPublisher) .doOnNext(System.out::println) .blockLast();
Actualizar índices de búsqueda
El siguiente ejemplo actualiza un índice de búsqueda de MongoDB existente con la nueva definición de índice especificada:
Document newIndex = new Document("mappings", new Document("dynamic", true)); Publisher<Void> publisher = collection.updateSearchIndex("<index name>", newIndex); Mono.from(publisher).block();
Eliminar índices de búsqueda
El siguiente ejemplo elimina un índice de búsqueda de MongoDB con el nombre especificado:
Publisher<Void> publisher = collection.dropIndex("<index name>"); Mono.from(publisher).block();
Text Index
El siguiente ejemplo crea un índice de texto en el campo de cadena especificado:
Publisher<String> publisher = collection.createIndex(Indexes.text("<field name>")); Mono.from(publisher).block();
Eliminar un índice
El siguiente ejemplo elimina un índice con el nombre especificado:
Publisher<Void> publisher = collection.dropIndex("<index name>"); Mono.from(publisher).block();