Docs Menu
Docs Home
/ /
Tutorials
/ / /

Cree índices

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.

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.

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.

Para crear una especificación para un índice ascendente, utilice el método auxiliar estático Indexes.ascending().

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

collection.createIndex(Indexes.ascending("name"))
.subscribe(new PrintToStringSubscriber<String>());

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.

Para crear una especificación de un índice descendente, utilice el método auxiliar estático Indexes.descending().

El siguiente ejemplo crea un índice descendente en el campo stars:

collection.createIndex(Indexes.descending("stars"))
.subscribe(new PrintToStringSubscriber<String>());

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.

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

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

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

Para admitir consultas geoespaciales, MongoDB admite varios índices geoespaciales.

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

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;

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

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

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.

Volver

Bases de datos y colecciones

En esta página