Definición
createIndexesCompila uno o más índices en una colección.
Tip
mongoshEn, este comando también se puede ejecutar a través deldb.collection.createIndex()db.collection.createIndexes()Métodos auxiliares y.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando toma la siguiente createIndexes forma:
db.runCommand( { createIndexes: <collection>, indexes: [ { key: { <key-value_pair>, <key-value_pair>, ... }, name: <index_name>, <option1>, <option2>, ... }, { ... }, { ... } ], writeConcern: { <write concern> }, commitQuorum: <int|string>, comment: <any> } )
Campos de comandos
El comando toma los siguientes createIndexes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | La colección para la que se crearán índices. |
| arreglo | Especifica los índices que se crearán. Cada documento de la matriz especifica un índice independiente. |
| Documento | Opcional. Un documento que expresa el nivel de confirmación de escritura. Omite el uso del nivel de confirmación de escritura por defecto. |
| entero o cadena de texto | Opcional. El número mínimo de miembros del conjunto de réplicas que contienen datos (es decir, el cuórum de confirmación), incluido el principal, que deben informar una compilación de índice exitosa antes de que el principal marque el A partir de MongoDB v,5.0 puede reanudar algunas compilaciones de índices interrumpidas cuando Los nodos del conjunto de réplicas en un quórum de confirmación deben tener Admite los siguientes valores:
|
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Cada documento de la matriz indexes puede tomar los siguientes campos:
Campo | Tipo | Descripción | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Documento | Especifica los campos del índice. Para cada campo, especifique un par clave-valor donde la clave sea el nombre del campo que se va a indexar y el valor sea la dirección o el tipo de índice. Si se especifica la dirección, especifique MongoDB admite varios tipos de índices, como índices de texto, geoespaciales y hash. Consulte los tipos de índice para obtener más información. Cambiado en la 4.2 versión:4.2 Los índices comodín de MongoDB admiten cargas de trabajo donde los usuarios realizan consultas sobre campos personalizados o una gran variedad de campos en una colección:
La clave de índice comodín debe usar una de las sintaxis mencionadas anteriormente. Por ejemplo, no se puede especificar una clave de índice compuesta. Para obtener documentación más completa sobre los índices comodín, incluidas las restricciones para su creación, consulte Restricciones de índices comodín. La Para ver ejemplos de creación de índices comodín, consulte Crear un índice comodín. | ||||||||||
| string | Un nombre que identifica de forma única el índice. | ||||||||||
| booleano | Opcional. Crea un índice único para que la colección no acepte la inserción o actualización de documentos cuyo valor de clave de índice coincida con un valor ya existente en el índice. Especifica La opción no está disponible para índices encriptados. | ||||||||||
| Documento | Opcional. Si se especifica, el índice solo hace referencia a los documentos que coinciden con la expresión del filtro. Consulta Índices parciales para obtener más información. Una expresión de filtro puede incluir:
Si estás utilizando cifrado a nivel de campo del lado del cliente o Queryable Encryption, un Puedes especificar una opción | ||||||||||
| booleano | Opcional. Si Los siguientes tipos de índices son escasos por defecto e ignoran esta opción: Para un índice compuesto que incluye claves de índice MongoDB ofrece la opción de crear índices parciales. Estos ofrecen una funcionalidad superior a la de los índices dispersos y son los preferidos. | ||||||||||
| entero | Opcional. Especifica un valor, en segundos, como tiempo de vida (TTL) para controlar cuánto tiempo MongoDB retiene los documentos en esta colección. Esta opción solo se aplica a los índices TTL. Consulta Caducar datos de colecciones configurando TTL para obtener más información. Si utilizas índices TTL creados antes de MongoDB 5.0, o si deseas sincronizar datos creados en MongoDB 5.0 con una versión anterior a la instalación 5.0, consulta Índices configurados usando NaN para evitar problemas de configuración errónea. El valor del índice TTL | ||||||||||
booleano | Opcional. Indicador que determina si el índice está oculto para el planificador de consultas. Un índice oculto no se evalúa en la selección del plan de consultas. El valor por defecto es | |||||||||||
| Documento | Opcional. Permite a los usuarios configurar el motor de almacenamiento por índice al crear un índice. La opción Las opciones de configuración del motor de almacenamiento especificadas al crear índices se validan y se registran en el oplog durante la replicación para admitir conjuntos de réplicas con miembros que utilizan diferentes motores de almacenamiento. | ||||||||||
| Documento | Opcional. Para los índices de texto, un documento que contiene pares de campo y peso. El peso es un número entero que tiene un rango de 1 a 99,999 y denota la importancia del campo en relación con los otros campos indexados en términos de la puntuación. Puedes especificar pesos para algunos o todos los campos indexados. Consulta Asignar pesos a los resultados de búsqueda de texto en implementaciones autogestionadas para ajustar las puntuaciones. El valor es por defecto | ||||||||||
| string | Opcional. Para los índices texto, el lenguaje que determina la lista de palabras vacías y las reglas para el stemmer y el tokenizador. Consulta Lenguajes de búsqueda de texto en implementaciones autogestionadas para ver los lenguajes disponibles y Especifica el lenguaje por defecto para un índice de texto en implementaciones autogestionadas para obtener más información y ejemplos. El valor por defecto es | ||||||||||
| string | Opcional. Para índices de texto, el nombre del campo, en los documentos de la colección, que contiene el idioma de reemplazo del documento. El valor predeterminado es. Consulte | ||||||||||
| entero | Opcional. El número de versión del índice Para conocer las versiones disponibles, consulte Versiones. | ||||||||||
| entero | Opcional. El número de versión del índice Para conocer las versiones disponibles, consulte Versiones. | ||||||||||
| entero | Opcional. Para los índices 2d, el número de cifras significativas del valor geohash almacenado de los datos de ubicación. El valor | ||||||||||
| Número | Opcional. Para índices d, el límite inferior inclusivo para los valores de longitud y latitud. El valor 2 predeterminado | ||||||||||
| Número | Opcional. Para índices d, el límite superior inclusivo para los valores de longitud y latitud. El valor 2 predeterminado | ||||||||||
| Número | Para los índices geoHaystack, especifique el número de unidades dentro de las cuales agrupar los valores de ubicación; es decir, agrupe en el mismo contenedor aquellos valores de ubicación que estén dentro del número especificado de unidades entre sí. El valor debe ser mayor que 0. | ||||||||||
| Documento | Opcional. Especifica la intercalación para el índice. La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento. Si has especificado una intercalación a nivel de colección, entonces:
La opción de intercalación tiene la siguiente sintaxis: Al especificar la intercalación, el campo | ||||||||||
| Documento | Opcional. Permite a los usuarios incluir o excluir rutas de campo específicas de un índice comodín mediante el La opción El
Los índices comodín omiten el campo Con la excepción de incluir explícitamente el campo |
mongosh proporciona los métodos db.collection.createIndex() y como db.collection.createIndexes() createIndexes envoltorios para el comando.
Considerations
MongoDB no permite la creación de índices de la versión 0.
Nombres de índices
Nota
Cambiado en MongoDB 4.2
MongoDB elimina el límite de longitud del nombre de índice de 127 bytes como máximo.
A partir de la 4.2 versión, el createIndexes comando y mongosh los ayudantes db.collection.createIndex() y informan un error si crea un índice con un nombre y luego intenta crear el mismo índice nuevamente pero con otro db.collection.createIndexes() nombre.
{ "ok" : 0, "errmsg" : "Index with name: x_1 already exists with a different name", "code" : 85, "codeName" : "IndexOptionsConflict" }
En versiones anteriores, MongoDB no recreó el índice, sino que devolvió un objeto de respuesta con un valor ok de 1 y una nota que indicaba que el índice no se había recreado. Por ejemplo:
{ "numIndexesBefore" : 2, "numIndexesAfter" : 2, "note" : "all indexes already exist", "ok" : 1 }
Conjuntos de réplicas y clústeres fragmentados
Nota
Requiere featureCompatibilityVersion 4.4+
Cada mongod en el set de réplicas o clúster debe tener featureCompatibilityVersion configurada al menos en 4.4 para iniciar la creación de índices simultáneamente en los miembros del set de réplicas.
La creación de índices en un set de réplicas o en un clúster se realiza simultáneamente en todos los miembros del set de réplicas que contienen datos. Para clústeres fragmentados, la creación de índices solo ocurre en fragmentos que contienen datos para la colección que se está indexando. El primario requiere un número mínimo de nodos portadores de datos voting (es decir, quórum de confirmación), incluido él mismo, que deben completar la compilación antes de marcar el índice como listo para usar. Consulta creación de índices en entornos replicados para obtener más información.
Para iniciar una creación de índice con un quórum de confirmación no predeterminado, especifique el commitQuorum.
Utilice el comando para modificar el quórum de confirmación de una compilación de índice en setIndexCommitQuorum curso.
Tipos de intercalación y de índices
Los siguientes índices solo soportan la comparación binaria simple y no soportan la intercalación:
text indexes,
2d índices, y
geoHaystack indexes.
Tip
Para crear un índice text, 2d o geoHaystack en una colección que tiene una intercalación no simple, debe especificar explícitamente {collation: {locale: "simple"} } al crear el índice.
Stable API
Cuando se debe utilizar Stable API V1:
No puede especificar ninguno de los siguientes campos en la matriz
indexes:backgroundbucketSizesparsestorageEngine
No se pueden crear índices de texto.
El planificador de consultas ignora los tipos de índice no admitidos mencionados anteriormente en modo estricto. Por ejemplo, intentar usar un
sparseíndice con generará elcursor.hint()siguienteBadValueerror:planner returned error :: caused by :: hint provided does not correspond to an existing index
Comportamiento
Simultaneidad
Cambiado en la versión 4.2.
Para featureCompatibilityVersion, "4.2" createIndexes utiliza un proceso de compilación optimizado que obtiene y mantiene un bloqueo exclusivo en la colección especificada al inicio y al final de la compilación del índice. Todas las operaciones posteriores en la colección deben esperar hasta que libere createIndexes createIndexes el bloqueo exclusivo. permite intercalar operaciones de lectura y escritura durante la mayor parte de la compilación del índice.
Para featureCompatibilityVersion, "4.0" createIndexes utiliza el proceso de compilación de índices anterior a,4.2 que, de forma predeterminada, establece un bloqueo exclusivo en la base de datos principal durante todo el proceso de compilación. El proceso de compilación anterior a.4 2 bloquea todas las operaciones en la base de datos y todas sus colecciones hasta que se complete la operación. Losbackground índices no tienen un bloqueo exclusivo.
Para obtener más información sobre el comportamiento de bloqueo createIndexes de, consulte Construcciones de índices en colecciones pobladas.
Límite de uso de memoria
createIndexes permite la creación de uno o más índices en una colección. createIndexes utiliza una combinación de memoria y archivos temporales en disco para completar la creación de índices. El límite predeterminado de uso de memoria para es createIndexes de 200 megabytes, compartidos entre todos los índices creados con un único createIndexes comando. Una vez alcanzado el límite de memoria, utiliza archivoscreateIndexes temporales de disco en un subdirectorio llamado _tmp dentro del --dbpath directorio para completar la creación.
Puede anular el límite de memoria configurando el maxIndexBuildMemoryUsageMegabytes parámetro de servidor. Un límite de memoria más alto puede resultar en una compilación de índices más rápida. Sin embargo, si este límite es demasiado alto en relación con la RAM no utilizada del sistema, puede provocar el agotamiento de la memoria y el apagado del servidor.
Opciones del índice
Non-Hidden Option
La opción oculta se puede cambiar sin tener que eliminar ni recrear el índice.Consulte "Opción oculta".
Cambiar las opciones del índice
Las opciones de intercalación de un índice existente se pueden actualizar. Para cambiar otras opciones del índice, elimine el índice existente con y db.collection.dropIndex() createIndexes luego ejecute con las nuevas opciones.
Opción de intercalación
Puedes crear múltiples índices en las mismas claves con diferentes intercalaciones. Para crear índices con el mismo patrón de clave pero diferentes intercalaciones, debes proporcionar nombres de índice únicos.
Si has especificado una intercalación a nivel de colección, entonces:
Si no especificas una intercalación al crear el índice, MongoDB crea el índice con la intercalación por defecto de la colección.
Si especificas una intercalación al crear el índice, MongoDB crea el índice con la intercalación especificada.
Tip
Al especificar una intercalación strength de 1 o 2, puedes crear un índice insensible a mayúsculas y minúsculas. El índice con una intercalación strength de 1 es insensible tanto a diacríticos como a mayúsculas.
Para utilizar un índice para las comparaciones de cadenas, una operación también debe especificar la misma intercalación. Es decir, un índice con una intercalación no puede soportar una operación que realice comparaciones de strings en los campos indexados si la operación especifica una intercalación diferente.
Advertencia
Debido a que los índices configurados con intercalación utilizan claves de intercalación ICU para lograr el orden de clasificación, las claves de índice que consideran la intercalación pueden ser más grandes que las claves de índice para los índices sin intercalación.
Una colección restaurants tiene los siguientes documentos:
db.restaurants.insertMany( [ { _id: 1, category: "café", status: "Open" }, { _id: 2, category: "cafe", status: "open" }, { _id: 3, category: "cafE", status: "open" } ] )
La colección restaurants tiene un índice en un campo de string category con la intercalación de la localización "fr".
db.restaurants.createIndex( { category: 1 }, { collation: { locale: "fr" } } )
La siguiente query, que especifica la misma intercalación que el índice, puede utilizar el índice:
db.restaurants.find( { category: "cafe" } ).collation( { locale: "fr" } )
Sin embargo, la siguiente operación de query, que por defecto utiliza el intercalador binario "simple", no puede usarse el índice:
db.restaurants.find( { category: "cafe" } )
Para un índice compuesto donde las claves prefijo del índice no son cadenas, arreglos ni documentos incrustados, una operación que especifique una intercalación diferente puede seguir utilizando el índice para soportar comparaciones en las claves prefijo del índice.
Por ejemplo, la colección restaurants tiene un índice compuesto en los campos numéricos score y price y el campo de string category; el índice se crea con la localización de intercalación "fr" para comparaciones de strings:
db.restaurants.createIndex( { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } )
Las siguientes operaciones, que utilizan la intercalación binaria "simple" para las comparaciones de strings, pueden usar el índice:
db.restaurants.find( { score: 5 } ).sort( { price: 1 } ) db.restaurants.find( { score: 5, price: { $gt: Decimal128( "10" ) } } ).sort( { price: 1 } )
La siguiente operación, que utiliza la intercalación binaria "simple" para las comparaciones de string en el campo category indexado, puede usar el índice para cumplir solo con la parte score: 5 de la query:
db.restaurants.find( { score: 5, category: "cafe" } )
Para confirmar si una consulta ha utilizado un índice, ejecuta la consulta con la opción explain().
Importante
Las coincidencias con claves de documentos, incluidas las claves de documentos incrustadas, utilizan una comparación binaria simple. Esto significa que una query para una clave como "type.café" no coincidirá con la clave "type.cafe", independientemente del valor que se establezca para el parámetro strength.
Opción oculta
Nota
Para ocultar un índice, debe tener featureCompatibilityVersion establecido en 4.4 o superior. Sin embargo, una vez oculto, el índice permanece oculto incluso con featureCompatibilityVersion establecido en 4.2 en los 4.4 binarios de MongoDB.
Para cambiar la opción hidden de los índices existentes, puedes usar los siguientes métodos mongosh:
Por ejemplo,
Para cambiar la opción
hiddende un índice atrue, utiliza el métododb.collection.hideIndex():db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); Para cambiar la opción
hiddende un índice afalse, utiliza el métododb.collection.unhideIndex():db.restaurants.unhideIndex( { borough: 1, city: 1 } );
Índices comodín
Nuevo en la versión 4.2.
Los índices comodín omiten el campo
_idpor defecto. Para incluir el campo_iden el índice comodín, debes incluirlo explícitamente en el documentowildcardProjection:{ "wildcardProjection" : { "_id" : 1, "<field>" : 0|1 } } Con la excepción de incluir explícitamente el campo
_id, no se pueden combinar declaraciones de inclusión y exclusión en el documentowildcardProjection.La
mongodversión de compatibilidad de características debe ser4.2para crear índices comodín. Para obtener instrucciones sobre cómo configurar fCV, consulte "Establecer la versión de compatibilidad de características en 6.0 las implementaciones de MongoDB ".Los índices comodín no admiten los siguientes tipos de índice o propiedades:
Nota
Los índices comodín son distintos de los índices de texto comodín y son incompatibles con ellos. No admiten consultas con el
$textoperador.Para obtener documentación completa sobre las restricciones de índice comodín, consulte Restricciones de índice comodín.
Para ver ejemplos de creación de índices comodín, consulte Crear un índice comodín. Para obtener documentación completa sobre índices comodín,consulte Índices comodín.
Transacciones
Puede crear colecciones e índices dentro de una transacción distribuida si la transacción es No es una transacción de escritura entre fragmentos.
Para usar createIndexes en una transacción, la transacción debe usar el nivel de consistencia de lectura "local". Si especificas un nivel de consistencia de lectura distinto de "local", la transacción fallará.
Ejemplo
El siguiente comando crea dos índices en la colección inventory de la base de datos products:
db.getSiblingDB("products").runCommand( { createIndexes: "inventory", indexes: [ { key: { item: 1, manufacturer: 1, model: 1 }, name: "item_manufacturer_model", unique: true }, { key: { item: 1, supplier: 1, model: 1 }, name: "item_supplier_model", unique: true } ], writeConcern: { w: "majority" } } )
Cuando los índices terminan de construirse exitosamente, MongoDB devuelve un documento de resultados que incluye un estado de "ok" : 1.
Crear un índice comodín
Novedades de la 4.2 versión: La mongod versión de compatibilidad de características debe ser 4.2 para crear índices comodín. Para obtener instrucciones sobre cómo configurar fCV, consulte "Establecer la versión de compatibilidad de características" en MongoDB.6 0 Implementaciones.
Para obtener documentación completa sobre los índices comodín, consulte Índices comodín.
Las siguientes listas muestran ejemplos de la creación de índices comodín:
Crear un índice comodín en múltiples rutas de campos específicos
Crear un índice comodín que excluya varias rutas de campos específicos
Crear un índice comodín en una ruta de un solo campo
Considere una colección products_catalog donde los documentos pueden contener un campo product_attributes. El campo product_attributes puede contener campos anidados arbitrarios, incluyendo documentos y matrices incrustados:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
La siguiente operación crea un índice comodín en el campo product_attributes:
use inventory db.runCommand( { createIndexes: "products_catalog", indexes: [ { key: { "product_attributes.$**" : 1 }, name: "wildcardIndex" } ] } )
Con este índice comodín, MongoDB indexa todos los valores escalares de product_attributes. Si el campo es un documento o arreglo anidado, el índice comodín recorre el documento/arreglo e indexa todos los campos escalares del documento/arreglo.
El índice comodín puede brindar soporte a queries arbitrarias de un solo campo en product_attributes o en uno de sus campos anidados:
db.products_catalog.find( { "product_attributes.superFlight" : true } ) db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt : 20 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
Nota
La sintaxis del índice comodín específica de la ruta es incompatible con la opción wildcardProjection. Consulte la documentación de parámetros para obtener más información.
Crear un índice comodín en todas las rutas de campos
Considere una colección products_catalog donde los documentos pueden contener un campo product_attributes. El campo product_attributes puede contener campos anidados arbitrarios, incluyendo documentos y matrices incrustados:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
La siguiente operación crea un índice comodín en todos los campos escalares (excluyendo el campo _id):
use inventory db.runCommand( { createIndexes: "products_catalog", indexes: [ { key: { "$**" : 1 }, name: "wildcardIndex" } ] } )
Con este índice comodín, MongoDB indexa todos los campos escalares de cada documento de la colección. Si un campo dado es un documento o arreglo anidado, el índice comodín recorre el documento/arreglo e indexa todos los campos escalares del documento/arreglo.
El índice creado puede soportar queries sobre cualquier campo arbitrario dentro de los documentos de la colección:
db.products_catalog.find( { "product_price" : { $lt : 25 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
Nota
Los índices comodín omiten el campo _id por defecto. Para incluir el campo _id en el índice comodín, se debe incluir explícitamente en el documento wildcardProjection. Consulta la documentación de parámetros para obtener más información.
Crear un índice comodín en múltiples rutas de campos específicos
Considere una colección products_catalog donde los documentos pueden contener un campo product_attributes. El campo product_attributes puede contener campos anidados arbitrarios, incluyendo documentos y matrices incrustados:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
La siguiente operación crea un índice comodín y utiliza la opción wildcardProjection para incluir únicamente los valores escalares de los campos product_attributes.elements y product_attributes.resistance en el índice.
use inventory db.runCommand( { createIndexes: "products_catalog", indexes: [ { key: { "$**" : 1 }, "wildcardProjection" : { "product_attributes.elements" : 1, "product_attributes.resistance" : 1 }, name: "wildcardIndex" } ] } )
Aunque el patrón clave "$**" abarca todos los campos del documento, el campo wildcardProjection limita el índice solo a los campos incluidos y los campos anidados relacionados.
Si un campo es un documento o un arreglo anidado, el índice comodín recorre el documento/arreglo e indexa todos los campos escalares del documento/arreglo.
El índice creado puede admitir consultas en cualquier campo escalar incluido en wildcardProjection:
db.products_catalog.find( { "product_attributes.elements" : { $eq: "Water" } } ) db.products_catalog.find( { "product_attributes.resistance" : "Bludgeoning" } )
Nota
Los índices comodín no soportan mezclar instrucciones de inclusión y exclusión en el documento wildcardProjection excepto cuando se incluye explícitamente el campo _id. Para obtener más información sobre wildcardProjection, consulta la documentación de los parámetros.
Crear un índice comodín que excluya varias rutas de campos específicos
Considere una colección products_catalog donde los documentos pueden contener un campo product_attributes. El campo product_attributes puede contener campos anidados arbitrarios, incluyendo documentos y matrices incrustados:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
La siguiente operación crea un índice comodín y utiliza el wildcardProjection documento para indexar todos los campos escalares de cada documento de la colección, excluyendo los product_attributes.elements product_attributes.resistance campos y:
use inventory db.runCommand( { createIndexes: "products_catalog", indexes: [ { key: { "$**" : 1 }, "wildcardProjection" : { "product_attributes.elements" : 0, "product_attributes.resistance" : 0 }, name: "wildcardIndex" } ] } )
Mientras que el patrón de clave "$**" cubre todos los campos del documento, el campo wildcardProjection excluye los campos especificados del índice.
Si un campo es un documento o un arreglo anidado, el índice comodín recorre el documento/arreglo e indexa todos los campos escalares del documento/arreglo.
El índice creado puede admitir consultas en cualquier campo escalar excepto aquellos excluidos wildcardProjection por:
db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt: 25 } } ) db.products_catalog.find( { "product_attributes.superStrength" : true } )
Nota
Los índices comodín no soportan mezclar instrucciones de inclusión y exclusión en el documento wildcardProjection excepto cuando se incluye explícitamente el campo _id. Para obtener más información sobre wildcardProjection, consulta la documentación de los parámetros.
Crear un índice con quórum de confirmación
Nota
Requiere featureCompatibilityVersion 4.4+
Cada mongod en el set de réplicas o clúster debe tener featureCompatibilityVersion configurada al menos en 4.4 para iniciar la creación de índices simultáneamente en los miembros del set de réplicas.
La creación de índices en un set de réplicas o en un clúster se realiza simultáneamente en todos los miembros del set de réplicas que contienen datos. Para clústeres fragmentados, la creación de índices solo ocurre en fragmentos que contienen datos para la colección que se está indexando. El primario requiere un número mínimo de nodos portadores de datos voting (es decir, quórum de confirmación), incluido él mismo, que deben completar la compilación antes de marcar el índice como listo para usar. Consulta creación de índices en entornos replicados para obtener más información.
Especifique la opción commitQuorum en la createIndexes operación para establecer el número mínimo de miembros con derecho a voto que contienen datos (es decir, el quórum de confirmación), incluido el principal, que debe completar la creación del índice antes de que el principal marque los índices como listos. El quórum de confirmación predeterminado votingMembers es, o todos los miembros del conjunto de réplicas que contienen datos.
La siguiente operación crea un índice con un quórum "majority"de confirmación de, o una mayoría simple de miembros que contienen datos:
db.getSiblingDB("examples").runCommand( { createIndexes: "invoices", indexes: [ { key: { "invoices" : 1 }, "name" : "invoiceIndex" } ], "commitQuorum" : "majority" } )
El primario marca la creación de índices como lista solo después de que una mayoría simple de nodos votantes con datos "vote" para confirmar la creación de índices. Para obtener más información sobre la creación de índices y el proceso de votación, consulta Creación de índices en entornos replicados.
Salida
El comando devuelve un documento que indica el éxito de la operación. El documento contiene algunos de los siguientes campos, pero no todos, según el createIndexes resultado:
createIndexes.createdCollectionAutomaticallySi es
true, entonces la colección no existía y se creó en el proceso de creación del índice.
createIndexes.okUn valor de
1indica que los índices están implementados. Un valor de0indica un error.
createIndexes.noteSe devuelve este
notesi ya existen uno o más índices. Esto indica que el índice no se creó ni se modificó.
Ejemplo de salida
El siguiente bloque de código ilustra un ejemplo de la salida createIndexes en un clúster fragmentado. En un clúster fragmentado, createIndexes genera un documento incrustado raw que contiene un documento por cada fragmento en el que se basa el índice. Las claves del documento incrustado raw son concatenaciones del ID del fragmento, el nombre de host y el puerto de los nodos individuales que lo componen.
{ raw: { 'atlas-2m11gv-shard-1/atlas-2m11gv-shard-01-00.cpfgx.mongodb.net:27017,atlas-2m11gv-shard-01-01.cpfgx.mongodb.net:27017,atlas-2m11gv-shard-01-02.cpfgx.mongodb.net:27017': { numIndexesBefore: 3, numIndexesAfter: 5, createdCollectionAutomatically: false, commitQuorum: 'votingMembers', ok: 1 }, 'atlas-2m11gv-shard-0/atlas-2m11gv-shard-00-00.cpfgx.mongodb.net:27017,atlas-2m11gv-shard-00-01.cpfgx.mongodb.net:27017,atlas-2m11gv-shard-00-02.cpfgx.mongodb.net:27017': { numIndexesBefore: 3, numIndexesAfter: 5, createdCollectionAutomatically: false, commitQuorum: 'votingMembers', ok: 1 } }, ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1743624296, i: 7 }), signature: { hash: Binary.createFromBase64('22j0GK8SIK806T+0OdCY6qYHocM=', 0), keyId: Long('7438621020069560323') } }, operationTime: Timestamp({ t: 1743624296, i: 7 }) }