Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 del pipeline 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 puedes 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 tu query hacen referencia a campos que están todos incluidos en el mismo índice, MongoDB puede devolver resultados directamente desde el índice. Estas consultas se denominan consultas cubiertas.

Para aprender cómo garantizar que tu índice cubra tu query, consulta query cubierta en el manual del Servidor.

Importante

Criterios de clasificación

Tus criterios de ordenació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 (A-Z) 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 se 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 soportar sus consultas. Las siguientes secciones describen los tipos de índices comunes y muestran cómo crear cada tipo de índice 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.

Puedes utilizar los métodos create_index() y create_indexes() para crear índices en una colección. El método create_index() toma un parámetro struct IndexModel que puedes construir utilizando el método builder() del tipo.

Para ver una lista completa de tipos de índices, consulta Tipos de índices 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 ordenamientos de un solo campo. También es compatible con los índices TTL que remueven automáticamente documentos de una colección después de un cierto período de tiempo. Para obtener más información sobre los índices TTL, consulta Í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 la clasificación en varios campos. Cuando se crea un índice compuesto, se debe especificar una dirección para cada uno de los campos indexados.

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 de 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 arreglo. Este índice mejora el rendimiento de las queries en campos de arreglos.

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 con índice clusterizado. Las colecciones con índice clusterizado almacenan documentos ordenados por el valor de la clave del índice agrupado. Para obtener más información sobre estas colecciones, consulte Colecciones con índice clusterizado 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 de ClusteredIndex.

  2. Llama al método create_collection().

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

Debes configurar los siguientes campos de la estructura ClusteredIndex:

  • El campo key, que especifica el patrón 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 de ClusteredIndex que utilice automáticamente los valores requeridos, puedes llamar al método default() del tipo.

El siguiente código crea un índice clúster con la configuración por defecto 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 soporte consultas query en contenido de string. Este índice hace referencia a un campo con un valor de tipo string o un valor de arreglo de tipo string. MongoDB soporta query de texto para varios lenguajes. Cuando se crea un índice de texto, se puede especificar el lenguaje por defecto como una 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 MongoDB Search

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 de MongoDB y de búsqueda vectorial

El siguiente código crea un índice de texto en el campo body de la colección sample_training.posts. El código configura una opción para especificar "spanish" como el lenguaje por defecto 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 utilizando 2dsphere índices. Puedes crear un índice 2dsphere en un campo con valores de objetos 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 muestra en 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. Por defecto, MongoDB crea un índice único de un solo campo en el campo _id cuando se crea una colección.

Para crear un índice único, especifica el campo o la combinación de campos que deseas mantener único y establece 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

Remover 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 remueve 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 el diseño de modelos de datos y la creación de índices adecuados para tu aplicación, consulta Estrategias de indexación y Crear índices para dar soporte a tus query en el manual del servidor.

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

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

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

Volver

Agregación

En esta página