Docs Menu
Docs Home
/ /

Indexes

En esta guía, aprenderá a usar el controlador de Rust para crear y administrar índices. Los índices son estructuras de datos especiales que mejoran el rendimiento de las consultas en MongoDB.

Si realiza una consulta en una colección sin índices, MongoDB escanea cada documento para encontrar coincidencias. Estos escaneos de colección son lentos y pueden afectar negativamente el rendimiento de su aplicación. Al crear un índice que cubre su consulta, MongoDB limita el número de documentos que inspecciona para encontrar coincidencias, lo que mejora el rendimiento.

Tip

Puede usar índices en operaciones de actualización, operaciones de eliminación y algunas etapas de la canalización de agregación. Para obtener más información sobre el uso de índices en agregaciones, consulte Mejorar el rendimiento con índices y filtros de documentos en el manual del servidor.

La siguiente tabla describe los elementos que puede incluir en una consulta de MongoDB:

Elemento
Descripción

Query

Required
Specifies the fields and values to match

opciones

Optional
Specify how the query executes

Proyección

Optional
Specifies the fields that MongoDB returns in matched documents

Sort

Optional
Specifies the order of documents returned

Cuando los elementos de consulta hacen referencia a campos incluidos en el mismo índice, MongoDB puede devolver resultados directamente desde el índice. Estas consultas se denominan consultas cubiertas.

Para saber cómo garantizar que su índice cubra su consulta, consulte Consulta cubierta en el manual del servidor.

Importante

Criterios de clasificación

Los criterios de clasificación deben coincidir o invertir el orden del índice.

Supongamos que una colección tiene el siguiente índice en la name campo en orden ascendente (AZ) y el campo age en orden descendente (9-0):

name_1_age_-1

MongoDB utiliza este índice cuando ordena documentos en cualquiera de las siguientes configuraciones:

  • name ascendente, age descendente

  • name descendente, age ascendente

Si especifica el mismo orden de clasificación para ambos campos, MongoDB no utiliza el índice y, en su lugar, realiza una clasificación en memoria.

Para mejorar el rendimiento de sus consultas, cree índices en los campos que aparecen con frecuencia en sus consultas. Sin embargo, es recomendable realizar un seguimiento del uso de memoria y disco del índice para la planificación de la capacidad, ya que cada índice consume espacio en disco y memoria. Además, si una operación de escritura actualiza un campo indexado, MongoDB también debe actualizar el índice correspondiente.

MongoDB admite esquemas dinámicos, por lo que su aplicación puede realizar consultas en campos con nombres desconocidos o variables. Puede crear índices comodín para estas consultas. Para obtener más información sobre este tipo de índice, consulte Índices comodín en el manual del servidor.

MongoDB admite múltiples tipos de índices para sus consultas. Las siguientes secciones describen los tipos de índices más comunes y muestran cómo crear cada uno en una colección.

Nota

Colecciones de muestra

Los ejemplos de esta guía utilizan colecciones de los datos de muestra de Atlas. Para aprender a importar estos datos, consulta el tutorial Cargar datos de muestra en la documentación de Atlas.

Puede usar los métodos create_index() y create_indexes() para crear índices en una colección. El método create_index() toma un parámetro de estructura IndexModel que puede construir mediante el método builder() del tipo.

Para ver una lista completa de tipos de índice, consulte Tipos de índice en el manual del servidor.

Un índice de campo único contiene una referencia a un campo de documento.

Este índice mejora el rendimiento de las consultas y ordenaciones de un solo campo. También admite índices TTL que eliminan automáticamente los documentos de una colección después de un tiempo determinado. Para obtener más información sobre los índices TTL, consulte Índices TTL en el manual del servidor.

Cuando se crea una nueva colección, MongoDB crea automáticamente un índice de campo único en el _id campo.

El siguiente código crea un índice ascendente en el campo city en la colección sample_training.zips:

let index = IndexModel::builder().keys(doc! { "city": 1 }).build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
city_1

Un índice compuesto almacena una referencia a múltiples campos de documentos.

Este índice mejora el rendimiento de las consultas y ordenaciones en múltiples campos. Al crear un índice compuesto, debe especificar una dirección para cada campo indexado.

Puede crear un índice de múltiples claves utilizando la misma sintaxis para crear un índice de campo único.

El siguiente código crea un índice compuesto en los campos city y pop en la colección sample_training.zips:

let index = IndexModel::builder()
.keys(doc! { "city": 1, "pop": -1 })
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
city_1_pop_-1

Un índice multiclave contiene una referencia a un campo con valor de matriz. Este índice mejora el rendimiento de las consultas en campos de matriz.

Puede crear un índice de múltiples claves utilizando la misma sintaxis para crear un índice de campo único.

El siguiente código crea un índice de clave múltiple en el campo tags de la colección sample_training.posts:

let index = IndexModel::builder().keys(doc! { "tags": 1 }).build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
tags_1

Los índices agrupados mejoran el rendimiento de las operaciones de inserción, actualización y eliminación en colecciones agrupadas. Almacenan documentos ordenados por el valor de la clave del índice agrupado. Para obtener más información sobre estas colecciones, consulte Colecciones agrupadas en el manual del servidor.

Solo puedes crear un índice agrupado al crear una colección. Para crear una colección con índice clusterizado, realice los siguientes pasos:

  1. Crea una instancia ClusteredIndex.

  2. Llama al método create_collection().

  3. Encadene el método clustered_index() al método create_collection(), pasando su instancia ClusteredIndex como parámetro de clustered_index().

Debes configurar los siguientes campos de la estructura ClusteredIndex:

  • El campo key, que especifica el patrón de clave. El valor de este campo debe ser { _id: 1 }.

  • El campo unique, que especifica la unicidad del índice. El valor de este campo debe ser true.

Para crear una instancia ClusteredIndex que utilice automáticamente los valores requeridos, puede llamar al método default() del tipo.

El siguiente código crea un índice agrupado con la configuración predeterminada en el campo _id al crear una nueva colección llamada items en la base de datos sample_training:

let db = client.database("sample_training");
let cl_idx = ClusteredIndex::default();
db.create_collection("items")
.clustered_index(cl_idx)
.await?;

Un índice de texto admite consultas de texto sobre contenido de cadena. Este índice hace referencia a un campo con un valor de cadena o de matriz de cadenas. MongoDB admite consultas de texto en varios idiomas. Al crear un índice de texto, puede especificar el idioma predeterminado como opción.

Una colección solo puede contener un índice de texto. Para crear un índice de texto en varios campos de texto, puedes crear un índice compuesto. Cuando ejecutas una query de texto después de crear un índice compuesto, la operación de búsqueda se ejecuta en todos los campos de texto del índice compuesto.

Tip

Índice de texto vs. Índice de búsqueda de MongoDB

Los índices de texto son diferentes de los índices de búsqueda de MongoDB, que permiten búsquedas de texto completo. Para obtener más información sobre los índices de búsqueda de MongoDB, consulte Guía de índices de búsqueda vectorial y de búsqueda de MongoDB.

El siguiente código crea un índice de texto en el campo body de la colección sample_training.posts. El código establece una opción para especificar "spanish" como idioma predeterminado para el índice de texto:

let idx_opts = IndexOptions::builder()
.default_language("spanish".to_string())
.build();
let index = IndexModel::builder()
.keys(doc! { "body": "text" })
.options(idx_opts)
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
body_"text"

MongoDB admite consultas que contienen datos de coordenadas geoespaciales mediante índices 2dsphere. Puede crear un índice 2dsphere en un campo con valores de objeto GeoJSON.

Este tipo de índice soporta las siguientes tareas:

  • Consultas sobre datos geoespaciales para encontrar inclusión, intersección y proximidad

  • Cálculo de distancias en un plano euclidiano

Importante

No puedes crear dos índices geoespaciales en el mismo campo.

El siguiente documento de ejemplo de la colección sample_mflix.theaters contiene el campo location.geo. Este campo tiene un valor de punto GeoJSON:

{
"_id": ...,
"theaterId": ...,
"location": {
"address": ...,
"geo": {
"type": "Point",
"coordinates": [
-93.24565,
44.85466
]
}
}
}

El siguiente código crea un índice geoespacial 2dsphere en el campo location.geo de la colección sample_mflix.theaters:

let index = IndexModel::builder()
.keys(doc! { "location.geo": "2dsphere" })
.build();
let idx = my_coll.create_index(index).await?;
println!("Created index:\n{}", idx.index_name);
Created index:
location.geo_"2dsphere"

Un índice único garantiza que los campos indexados no almacenen valores duplicados. De forma predeterminada, MongoDB crea un índice de campo único en el campo _id al crear una colección.

Para crear un índice único, especifique el campo o la combinación de campos cuya unicidad desea mantener y configure la opción unique en true.

El siguiente código muestra cómo establecer el campo unique en true en una instancia IndexOptions y pasar estas opciones al crear un IndexModel:

let opts = IndexOptions::builder().unique(true).build();
let index = IndexModel::builder()
.keys(doc! { "_id": -1 })
.options(opts)
.build();

Puedes remover, o descartar, cualquier índice de una colección excepto el índice único por defecto en el campo _id. Para remover un índice, pase el nombre del índice al método drop_index().

Tip

Eliminar todos los índices

Puede eliminar todos los índices de una colección excepto el índice _id a la vez utilizando el método drop_indexes().

El siguiente ejemplo elimina un índice llamado city_1 de la colección sample_training.zips:

my_coll.drop_index("city_1".to_string()).await?;

Para obtener más información sobre cómo diseñar modelos de datos y crear índices apropiados para su aplicación, consulte Estrategias de indexación y Crear índices para soportar sus consultas en el manual del Servidor.

Para obtener más información sobre cómo realizar operaciones de lectura, consulte las guías en la sección Operaciones de lectura.

Para obtener más información sobre los conceptos mencionados en esta guía, consulte la siguiente documentación del servidor:

Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API:

Volver

Agregación

En esta página