Overview
En esta guía, puede aprender a utilizar índices con el controlador C. Los índices pueden mejorar la eficiencia de las consultas y agregar funcionalidad a la consulta y el almacenamiento de documentos.
Sin índices, MongoDB debe escanear todos los documentos de una colección para encontrar los que coinciden con cada consulta. Estos escaneos de colecciones son lentos y pueden afectar negativamente el rendimiento de la aplicación. Sin embargo, si existe un índice adecuado para una consulta, MongoDB puede usarlo para limitar los documentos que debe inspeccionar.
Consideraciones operativas
Para mejorar el rendimiento de las consultas, cree índices en los campos que aparecen con frecuencia en las consultas y operaciones de su aplicación que devuelven resultados ordenados. Cada índice que agregue consume espacio en disco y memoria cuando está activo, por lo que le recomendamos que realice un seguimiento del uso de memoria y disco del índice para planificar la capacidad. Además, cuando una operación de escritura actualiza un campo indexado, MongoDB actualiza el índice relacionado, lo que puede afectar negativamente al rendimiento de las operaciones de escritura.
Puedes utilizar Índices comodín en su aplicación MongoDB para consultar campos cuyos nombres no se conocen de antemano o son arbitrarios. Los índices comodín no están diseñados para reemplazar la planificación de índices basada en la carga de trabajo.
Para obtener más información sobre cómo diseñar su modelo de datos y elegir índices apropiados para su aplicación, consulte la guía Modelado de datos e índices en el manual de MongoDB Server.
Datos de muestra
Los ejemplos de esta guía utilizan el movies y la theaters colección en la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía "Comenzar con Atlas".
Crear un índice
MongoDB admite varios tipos de índices para facilitar la consulta de datos. Las siguientes páginas describen los tipos de índice más comunes y ofrecen código de ejemplo para crear cada uno.
Las siguientes secciones describen otros tipos de índices comunes y proporcionan código de muestra para crear cada tipo de índice.
Índice geoespacial
El siguiente ejemplo crea un índice 2dsphere en el campo location.geo que contiene objetos GeoJSON en la colección theaters:
bson_error_t error; bson_t *keys = BCON_NEW("location.geo", BCON_UTF8("2dsphere")); mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL); if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) { printf("Successfully created index\n"); } else { fprintf(stderr, "Failed to create index: %s", error.message); } bson_destroy(keys); mongoc_index_model_destroy(index_model);
Para obtener más información sobre el tipo de datos GeoJSON, consulte Objetos GeoJSON en el manual de MongoDB Server.
Índice único
El siguiente ejemplo crea un índice único ascendente en el campo title:
bson_error_t error; bson_t *keys = BCON_NEW("title", BCON_INT32(1)); bson_t *opts = BCON_NEW("unique", BCON_BOOL(true)); mongoc_index_model_t *index_model = mongoc_index_model_new(keys, opts); if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) { printf("Successfully created index\n"); } else { fprintf(stderr, "Failed to create index: %s", error.message); } bson_destroy(keys); bson_destroy(opts); mongoc_index_model_destroy(index_model);
Índice de comodines
El siguiente ejemplo crea un índice comodín ascendente en la colección especificada:
bson_error_t error; bson_t *keys = BCON_NEW("$**", BCON_INT32(1)); mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL); if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) { printf("Successfully created index\n"); } else { fprintf(stderr, "Failed to create index: %s", error.message); } bson_destroy(keys); mongoc_index_model_destroy(index_model);
Índice del clúster
El siguiente ejemplo crea una nueva colección con un índice clúster ascendente en el campo _id:
bson_error_t error; bson_t *opts = BCON_NEW("clusteredIndex", "{", "key", "{", "_id", BCON_INT32(1), "}", "unique", BCON_BOOL(true), "}"); mongoc_database_t *database = mongoc_client_get_database(client, "sample_mflix"); if (mongoc_database_create_collection(database, "clustered_collection", opts, &error)) { printf("Successfully created collection\n"); } else { fprintf(stderr, "Failed to create collection: %s", error.message); } mongoc_database_destroy(database); bson_destroy(opts);
Text Index
El siguiente ejemplo crea un índice de texto en el campo de cadena title:
bson_error_t error; bson_t *keys = BCON_NEW("title", BCON_UTF8("text")); mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL); if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) { printf("Successfully created index\n"); } else { fprintf(stderr, "Failed to create index: %s", error.message); } bson_destroy(keys); mongoc_index_model_destroy(index_model);
Eliminar un índice
Puedes quitar cualquier índice no utilizado excepto el índice único predeterminado en el campo _id. Envía una estructura mongoc_collection_t, el nombre del índice y una estructura opcional bson_error_t a la función mongoc_collection_drop_index() para remover un índice de una colección.
El siguiente ejemplo elimina un índice con el nombre "_title_" de la colección movies:
bson_error_t error; if (mongoc_collection_drop_index(collection, "_title_", &error)) { printf("Successfully dropped index\n"); } else { fprintf(stderr, "Failed to drop index: %s", error.message); }
Nota
No se puede eliminar un solo campo de un índice de texto compuesto. Debe eliminar todo el índice y crear uno nuevo para actualizar los campos indexados.
Documentación de la API
Para aprender más sobre alguna de las funciones tratadas en esta guía, consulta la siguiente documentación de la API: