Los índices facilitan la ejecución eficiente de consultas en MongoDB. Para crear un índice en uno o más campos, envíe un documento de especificación de índice al MongoCollection.createIndex() .
El controlador Java Reactive Streams proporciona la Indexes clase, que incluye métodos de fábrica estáticos para crear documentos de especificación de índices para los distintos tipos de claves de índice de MongoDB. Para obtener más información sobre los tipos de índices, consulte Índices en el manual del servidor.
Nota
MongoDB solo crea un índice si no existe ya un índice con la misma especificación.
Requisitos previos
Debe incluir las siguientes declaraciones de importación en su programa para ejecutar los ejemplos de código de esta guía:
import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.reactivestreams.client.MongoCollection; import org.bson.Document; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Filters;
Importante
Esta guía utiliza las implementaciones Subscriber, que se describen en la Manual de inicio rápido.
Conectarse a una implementación de MongoDB
Primero, conéctese a una implementación de MongoDB, luego declare y defina las instancias MongoDatabase y MongoCollection.
El siguiente código se conecta a una implementación independiente de MongoDB que se ejecuta en localhost, en el puerto 27017. Luego, define la variable database para referirse a la base de datos test y la variable collection para referirse a la colección restaurants:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para obtener más información sobre cómo conectarse a implementaciones de MongoDB, consulte el tutorial Conectarse a MongoDB.
Índice ascendente
Para crear una especificación para un índice ascendente, utilice el método auxiliar estático Indexes.ascending().
Índice ascendente único
El siguiente ejemplo crea un índice ascendente en el campo name:
collection.createIndex(Indexes.ascending("name")) .subscribe(new PrintToStringSubscriber<String>());
Índice compuesto ascendente
El siguiente ejemplo crea un índice compuesto ascendente en el campo stars y el campo name:
collection.createIndex(Indexes.ascending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
Para ver una forma alternativa de crear un índice compuesto, consulte la sección Índices compuestos.
Índice descendente
Para crear una especificación de un índice descendente, utilice el método auxiliar estático Indexes.descending().
Índice de clave descendente única
El siguiente ejemplo crea un índice descendente en el campo stars:
collection.createIndex(Indexes.descending("stars")) .subscribe(new PrintToStringSubscriber<String>());
Índice de clave descendente compuesto
El siguiente ejemplo crea un índice compuesto descendente en el campo stars y el campo name:
collection.createIndex(Indexes.descending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
Para ver una forma alternativa de crear un índice compuesto, consulte la sección Índices compuestos.
Índices compuestos
Para crear una especificación para un índice compuesto, utilice el método auxiliar estático Indexes.compoundIndex().
Nota
Para crear una especificación para un índice compuesto con todas las claves en orden ascendente, puede usar el método ascending(). Para crear una especificación para un índice compuesto con todas las claves en orden descendente, puede usar el método descending().
El siguiente ejemplo crea un índice compuesto en el campo stars en orden descendente y en el campo name en orden ascendente:
collection.createIndex( Indexes.compoundIndex(Indexes.descending("stars"), Indexes.ascending("name")) ).subscribe(new PrintToStringSubscriber<String>());
Text Indexes
MongoDB proporciona índices de texto para facilitar la búsqueda de contenido de cadenas. Los índices de texto pueden incluir cualquier campo cuyo valor sea una cadena o un array de elementos de cadena. Para crear una especificación para un índice de texto, utilice el método auxiliar estático Indexes.text().
El siguiente ejemplo crea un índice de texto en el campo name:
collection.createIndex(Indexes.text("name")) .subscribe(new PrintToStringSubscriber<String>());
Índice encriptado
Para crear una especificación para un índice hash, utilice el método auxiliar estático Indexes.hashed().
El siguiente ejemplo crea un índice encriptado en el campo _id:
collection.createIndex(Indexes.hashed("_id")) .subscribe(new PrintToStringSubscriber<String>());
Índices geoespaciales
Para admitir consultas geoespaciales, MongoDB admite varios índices geoespaciales.
2dsphere
Para crear una especificación para un índice 2dsphere, utiliza el método estático asistente Indexes.geo2dsphere().
El siguiente ejemplo crea un índice 2dsphere en el campo contact.location:
collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintToStringSubscriber<String>());
Opciones del índice
Además del documento de especificación de índice, el método createIndex() puede tomar un documento de opciones de índice, que indica al controlador que cree índices únicos o índices parciales.
El controlador proporciona la clase IndexOptions para especificar varias opciones de índice.
Agrega la siguiente instrucción de importación a tu código para crear una instancia de IndexOptions.
import com.mongodb.client.model.IndexOptions;
Índice único
El siguiente código especifica la opción unique(true) para crear un índice único en los campos name y stars:
IndexOptions indexOptions = new IndexOptions().unique(true); collection.createIndex(Indexes.ascending("name", "stars"), indexOptions) .subscribe(new PrintToStringSubscriber<String>());
Índice parcial
Para crear un índice parcial, incluya la opción de índice partialFilterExpression.
El siguiente ejemplo crea un índice parcial en documentos en los que el valor del campo status es "A".
IndexOptions partialFilterIndexOptions = new IndexOptions() .partialFilterExpression(Filters.exists("contact.email")); collection.createIndex( Indexes.descending("name", "stars"), partialFilterIndexOptions) .subscribe(new PrintToStringSubscriber<String>());
Obtener una lista de índices de una colección
Utilice el método listIndexes() para obtener una lista de índices. El siguiente código lista los índices de la colección:
collection.listIndexes().subscribe(new PrintDocumentSubscriber());
Para obtener más información sobre otras opciones de índice, consulte Propiedades de índice en el manual del servidor.