Docs Menu
Docs Home
/ /

Optimizar consultas mediante el uso de índices

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.

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.

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:

  1. Crea un nuevo proyecto Java en tu IDE.

  2. Instale el controlador Java Reactive Streams en su proyecto Java.

  3. Instale la biblioteca Project Reactor en su proyecto Java.

  4. Copie el siguiente código y péguelo en un nuevo archivo Java llamado IndexApp.java.

  5. Copia un ejemplo de código de esta página y pégalo en las líneas especificadas del archivo.

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}

El siguiente ejemplo crea un índice ascendente en el campo especificado:

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

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();

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();

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();

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();

El siguiente ejemplo crea un índice comodín en la colección especificada:

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

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();

Las siguientes secciones contienen ejemplos de código que describen cómo administrar los índices de búsqueda de MongoDB.

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();

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();

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();

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();

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();

El siguiente ejemplo elimina un índice con el nombre especificado:

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

Volver

Supervisar los cambios en los datos

En esta página