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
/ /

createIndexes (comando de base de datos)

createIndexes

Compila uno o más índices en una colección.

Tip

En mongosh. Este comando también se puede ejecutar a través del db.collection.createIndex() y db.collection.createIndexes() métodos asistentes.

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.

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.

El comando createIndexes toma la siguiente 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>
}
)

El comando createIndexes acepta los siguientes campos:

Campo
Tipo
Descripción

createIndexes

string

La colección para la que crear índices.

indexes

arreglo

Especifica los índices que se crearán. Cada documento de la matriz especifica un índice independiente.

writeConcern

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.

commitQuorum

entero o cadena de texto

opcional. El número mínimo de miembros del set de réplicas que contienen datos (es decir, quórum de confirmación), incluyendo el primario, que debe informar una creación de índices exitosa antes de que el primario marque el indexes como listo.

A partir de MongoDB v5.0, puede reanudar algunas creaciones de índices interrumpidas cuando el commit quorum is set a "votingMembers".

Los nodos del conjunto de réplicas en un quórum de confirmación deben tener members[n].buildIndexes establecido true en. Si algún nodo con derecho a voto tiene members[n].buildIndexes establecido false en, no podrá usar el "votingMembers" quórum de confirmación predeterminado. Configure todos los nodos con members[n].buildIndexes establecido en true o seleccione un quórum de confirmación diferente.

Admite los siguientes valores:

  • "votingMembers" - todos los nodos votantes con datos del set de réplicas (por defecto). Nodo "votante" es cualquier nodo del set de réplicas donde members[n].votes es mayor que 0.

  • "majority" - una mayoría simple de miembros del conjunto de réplicas que contienen datos.

  • <int> - un número específico de miembros del set de réplicas que contienen datos.

  • 0 - Desactiva el comportamiento de votación por quórum. Los miembros inician la creación de índices simultáneamente, pero no votan ni esperan el quórum antes de completar la creación de índices. Si inicia una creación de índices con un quórum de confirmación de 0, no podrá modificar posteriormente el quórum de confirmación usando setIndexCommitQuorum.

  • Un nombre de etiqueta de un set de réplicas.

comment

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 en el arreglo indexes puede incluir los siguientes campos:

Campo
Tipo
Descripción

key

Documento

Especifica los campos del índice. Para cada campo, especifique un par clave-valor en el que la clave sea el nombre del campo a indexar y el valor sea la dirección del índice o el tipo de índice. Si se especifica la dirección, especifique 1 para ascendente o -1 para descendente.

MongoDB admite varios tipos de índices diferentes, incluidos:

Consulta tipos de índices para obtener más información.

Los índices comodín compatibles con cargas de trabajo donde los usuarios consultan campos personalizados o una amplia variedad de campos en una colección:

  • Puedes crear un índice comodín en un campo específico y sus subrutas o en todos los campos de un documento.

    Para obtener más detalles, consulte Índices comodín.

name

string

Un nombre que identifica de manera única el índice.

unique

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 true para crear un índice único. El valor por defecto es false.

La opción no está disponible para índices encriptados.

partialFilterExpression

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 partialFilterExpression no puede hacer referencia a un campo cifrado.

Puedes especificar una opción partialFilterExpression para todos los tipos de índices de MongoDB.

sparse

booleano

Opcional. Si true, el índice solo hace referencia a documentos con el campo especificado. Estos índices utilizan menos espacio, pero se comportan de manera diferente en algunas situaciones (particularmente en ordenamientos). El valor por defecto es false. Consulta índices dispersos para obtener más información.

Los siguientes tipos de índices son escasos por defecto e ignoran esta opción:

Para un índice compuesto que incluye 2dsphere clave(s) de índice junto con claves de otros tipos, solo los campos de índice de 2dsphere determinan si el índice hace referencia a un documento.

MongoDB proporciona la opción de crear índices parciales. Éstas ofrecen un superconjunto de la funcionalidad de los índices dispersos y se prefieren en su lugar.

expireAfterSeconds

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 expireAfterSeconds debe estar entre 0 y 2147483647, inclusive.

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 false.

storageEngine

Documento

Opcional. Permite a los usuarios configurar el motor de almacenamiento por índice al crear un índice.

La opción storageEngine debe tomar la siguiente forma:

storageEngine: { <storage-engine-name>: <options> }

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.

weights

Documento

opcional. Para los índices de texto, un documento que contiene pares de campos y pesos. 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 demás campos indexados en términos de la puntuación. Se pueden especificar ponderaciones para algunos o todos los campos indexados. Consulta Asignar pesos a los resultados de la query de $text en implementaciones autogestionadas para ajustar los puntajes. El valor por defecto es 1.

default_language

string

opcional. Para los índices de texto, el lenguaje que determina la lista de palabras vacías y las reglas para el stemmer y el tokenizador. Consulta los $text languajes del query en implementaciones autogestionados para conocer los lenguajes disponibles y Specify Language for Text índices en Self-Managed MongoDB para obtener más información y ejemplos. El valor por defecto es english.

language_override

string

Opcional. Para los índices de texto, el nombre del campo en los documentos de la colección que contiene el idioma de anulación para el documento. El valor es por defecto language. Consulte Especificar el lenguaje para los índices de texto en MongoDB autogestionado para un ejemplo.

textIndexVersion

entero

Opcional. El número de versión del índice text. Los usuarios pueden utilizar esta opción para sobrescribir el número de versión por defecto.

Para las versiones disponibles, consulta Versiones del índice de texto en implementaciones autogestionadas.

2dsphereIndexVersion

entero

Opcional. El número de versión del índice 2dsphere. Los usuarios pueden utilizar esta opción para sobrescribir el número de versión por defecto.

Para las versiones disponibles, consulta Índices 2dsphere.

bits

entero

Opcional. Para los índices 2d, el número de cifras significativas del valor geohash almacenado de los datos de ubicación.

El valor bits va de 1 a 32 inclusive. El valor por defecto es 26.

min

Número

opcional. Para los índices 2d, el límite inferior inclusivo para los valores de longitud y latitud. El valor por defecto es -180.0.

max

Número

opcional. Para los índices 2d, el límite superior inclusivo de los valores de longitud y latitud. El valor por defecto es 180.0.

collation

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:

  • 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.

La opción de intercalación tiene la siguiente sintaxis:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Al especificar la intercalación, el campo locale es obligatorio; todos los demás campos de intercalación son opcionales. Para las descripciones de los campos, consulta Documento de intercalación.

wildcardProjection

Documento

Opcional.

Permitir a los usuarios incluir o excluir rutas de campo específicas de un índice comodín utilizando el patrón de clave { "$**" : 1}. Esta opción solo es válida si se crea un índice comodín en todos los campos del documento. No puede especificar esta opción si está creando un índice comodín en una ruta de campo específica y sus subcampos, por ejemplo, { "path.to.field.$**" : 1 }

La opción wildcardProjection tiene la siguiente forma:

wildcardProjection: {
"path.to.field.a" : <value>,
"path.to.field.b" : <value>
}

El <value> puede ser uno de los siguientes:

  • 1 o true para incluir el campo en el índice comodín.

  • 0 o false para excluir el campo del índice comodín.

Los índices comodín omiten el campo _id por defecto. Para incluir el campo _id en el índice comodín, debes incluirlo explícitamente en el documento wildcardProjection:

{
"wildcardProjection" : {
"_id" : 1,
"<field>" : 0|1
}
}

Todas las instrucciones en el documento wildcardProjection deben ser de inclusión o de exclusión. También puede incluir el campo _id con las instrucciones de exclusión. Esta es la única excepción a la regla.

mongosh proporciona los métodos db.collection.createIndex() y db.collection.createIndexes() como contenedores para el comando createIndexes.

MongoDB no permite la creación de índices de la versión 0.

El createIndexes comando y mongosh asistentes db.collection.createIndex() y db.collection.createIndexes() reportan un error si creas un índice con un nombre y luego intentas crear el mismo índice nuevamente pero con otro nombre.

{
"ok" : 0,
"errmsg" : "Index with name: x_1 already exists with a different name",
"code" : 85,
"codeName" : "IndexOptionsConflict"
}

En versiones anteriores, MongoDB no volvía a crear el índice, sino que devolvía un objeto de respuesta con un valor ok de 1 y una nota que implicaba que el índice no se había recreado. Por ejemplo:

{
"numIndexesBefore" : 2,
"numIndexesAfter" : 2,
"note" : "all indexes already exist",
"ok" : 1
}

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 índices con un quórum de confirmación diferente al por defecto, especifica el commitQuorum.

Utilice el comando setIndexCommitQuorum para modificar el quórum de confirmación de una creación de índices en curso.

Los siguientes índices solo soportan la comparación binaria simple y no soportan la intercalación:

Tip

Para crear un índice text o 2d en una colección que tenga una intercalación no simple, debe especificar explícitamente {collation: {locale: "simple"} } al crear el índice.

Cuando se debe utilizar Stable API V1:

  • No puedes especificar ninguno de los siguientes campos en el arreglo indexes:

    • background

    • bucketSize

    • sparse

    • storageEngine

  • No puedes crear índices de texto.

  • Los tipos de índice no admitidos mencionados anteriormente son ignorados por el planificador de consultas en modo estricto. Por ejemplo, intentar usar un índice sparse con cursor.hint() dará como resultado el siguiente error BadValue:

    planner returned error :: caused by :: hint provided does not
    correspond to an existing index

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 pre-4.2 proceso de creación de índices que, por defecto, obtiene un bloqueo exclusivo en la base de datos principal durante toda la duración del proceso de construcción. El proceso de compilación previo a la versión4.2 bloquea todas las operaciones en la base de datos y todas sus colecciones hasta que finaliza la operación. background índices no adquieren un bloqueo exclusivo.

Para obtener más información sobre el comportamiento de bloqueo de createIndexes, consulta Creación de Índices en Colecciones Poboadas.

Importante

Si un nodo votante con datos se vuelve inaccesible y el commitQuorum está configurado en el valor por defecto votingMembers, la creación de índices puede quedarse atascada hasta que ese nodo vuelva a estar en linea.

createIndexes admiten crear uno o más índices en una colección. createIndexes usa una combinación de memoria y archivos temporales en el disco para construir índices. El límite de memoria por defecto es de 200 megabytes por comando createIndexes, compartido equitativamente entre todos los índices construidos en ese comando. Por ejemplo, si se crean 10 índices con un solo comando createIndexes, MongoDB asigna a cada índice 20 megabytes para el proceso de creación del índice al usar el límite de memoria por defecto de 200. Cuando se alcance el límite de memoria, MongoDB creará archivos temporales en el subdirectorio _tmp dentro de --dbpath para completar la compilación.

Ajuste el límite de memoria con el parámetromaxIndexBuildMemoryUsageMegabytes. Aumentar este parámetro solo es necesario en casos excepcionales, como al ejecutar varias compilaciones de índices simultáneas con un solo comandocreateIndexeso al indexar un conjunto de datos de más de 500GB.

Cada comando createIndexes tiene un límite de maxIndexBuildMemoryUsageMegabytes. Cuando usas el maxNumActiveUserIndexBuilds por defecto de 3, el uso total de memoria para todas las creaciones de índices concurrentes puede alcanzar hasta 3 veces el valor de maxIndexBuildMemoryUsageMegabytes.

La opción oculta se puede cambiar sin eliminar ni volver a crear el índice. Consulte Opción oculta.

Se pueden actualizar las opciones de intercalación en un índice existente. Para cambiar otras opciones del índice, descarta el índice existente en db.collection.dropIndex() y luego ejecuta createIndexes con las nuevas opciones.

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.

Para cambiar la opción hidden de los índices existentes, puedes usar los siguientes métodos mongosh:

Por ejemplo,

  • Para cambiar la opción hidden de un índice a true, utiliza el método db.collection.hideIndex():

    db.restaurants.hideIndex( { borough: 1, ratings: 1 } );
  • Para cambiar la opción hidden de un índice a false, utiliza el método db.collection.unhideIndex():

    db.restaurants.unhideIndex( { borough: 1, city: 1 } );
  • Los índices comodín omiten el campo _id por defecto. Para incluir el campo _id en el índice comodín, debes incluirlo explícitamente en el documento wildcardProjection:

    {
    "wildcardProjection" : {
    "_id" : 1,
    "<field>" : 0|1
    }
    }

    Todas las instrucciones en el documento wildcardProjection deben ser de inclusión o de exclusión. También puede incluir el campo _id con las instrucciones de exclusión. Esta es la única excepción a la regla.

  • Los índices comodín no son compatibles con:

    Los índices comodín son índices escasos. No ofrecen soporte para consultas cuando no existe un campo indexado. Un índice comodín indexará el documento si el campo comodín tiene un valor de null.

    A partir de MongoDB 7.0, los índices comodín admiten el orden de clasificación ascendente (1) y descendente (-1). Las versiones anteriores solo admitían el orden ascendente.

Para obtener más información, consulta:

Puede crear colecciones e índices dentro de una transacción distribuida si la transacción es no es una transacción de escritura entre particiones.

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á.

Existen diferencias importantes entre los quorum de confirmación y niveles de confirmación de escritura (write concern):

  • La creación de índices utiliza quórums de confirmación.

  • Las operaciones de guardado utilizan el nivel de confirmación de escritura.

Cada nodo que lleva datos en un clúster es un miembro votante.

El quórum de confirmación especifica cuántos miembros con derecho a voto que contienen datos o qué miembros con derecho a voto, incluido el primario, deben estar preparados para comprometerse a una creación de índices simultánea antes de que el primario ejecute la confirmación.

El nivel de confirmación de escritura es el nivel de reconocimiento de que la escritura se propagó a la cantidad especificada de instancias.

Modificado en la versión 8.0: El quórum de confirmación especifica cuántos miembros deben estar listos para completar la creación de índices antes de que el primario confirme la creación de índices. Por el contrario, cuando el primario ha confirmado la creación de índices, el nivel de confirmación de escritura especifica cuántos nodos deben replicar la entrada del oplog de creación de índices antes de que el comando devuelva éxito.

En versiones anteriores, cuando el nodo primario confirmaba la creación de índices, el nivel de confirmación de escritura especificaba cuántos nodos debían completar la creación de índices antes de que el comando devolviera éxito.

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 con éxito, MongoDB devuelve un documento de resultados que incluye un estado de "ok" : 1.

Nota

Para la documentación completa sobre los Índices comodín, consulta Índices comodín.

Las siguientes listas muestran ejemplos de la creación de índices comodín:

Considera una colección products_catalog donde los documentos pueden contener un campo product_attributes. El product_attributes campo puede contener campos anidados arbitrarios, incluidos documentos incrustados y arreglos:

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.

Considera una colección products_catalog donde los documentos pueden contener un campo product_attributes. El product_attributes campo puede contener campos anidados arbitrarios, incluidos documentos incrustados y arreglos:

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.

Considera una colección products_catalog donde los documentos pueden contener un campo product_attributes. El product_attributes campo puede contener campos anidados arbitrarios, incluidos documentos incrustados y arreglos:

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 soportar queries en cualquier campo escalar incluido en el 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.

Considera una colección products_catalog donde los documentos pueden contener un campo product_attributes. El product_attributes campo puede contener campos anidados arbitrarios, incluidos documentos incrustados y arreglos:

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 documento wildcardProjection para indexar todos los campos escalares de cada documento en la colección, excluyendo los campos product_attributes.elements y product_attributes.resistance:

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.

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 establecer el quórum de confirmación, utiliza createIndexes para especificar el valor de commitQuorum.

commitQuorum especifica cuántos nodos votantes con datos o cuáles, incluido el primario, deben estar preparados para confirmar la creación de índices antes de que el primario ejecute la confirmación. El quórum de confirmación por defecto es votingMembers, lo que significa todos los nodos con 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.

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.createdCollectionAutomatically

Si es true, entonces la colección no existía y se creó en el proceso de creación del índice.

createIndexes.numIndexesBefore

El número de índices al inicio del comando.

createIndexes.numIndexesAfter

El número de índices al final del comando.

createIndexes.ok

Un valor de 1 indica que los índices están implementados. Un valor de 0 indica un error.

createIndexes.note

Este note se devuelve si ya existe un índice o índices existentes. Esto indica que el índice no fue creado ni cambiado.

createIndexes.errmsg

Devuelve información sobre cualquier error.

createIndexes.code

El código de error que representa el tipo de error.

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 })
}

Volver

Cree