Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

db.colección.createIndex() (método de mongosh)

MongoDB con controladores

Esta página documenta un método mongosh. Para ver el método equivalente en un driver de MongoDB, consulte la página correspondiente a su lenguaje de programación:
db.collection.createIndex(keys, options, commitQuorum)

Crea índices en colecciones.

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

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

The createIndex() method has the following form:

db.collection.createIndex( <keys>, <options>, <commitQuorum>)

The createIndex() method takes the following parameters:

Parameter
Tipo
Descripción

keys

Documento

Un documento que contiene pares de campo y valor, donde el campo actúa como clave del índice y el valor describe el tipo de índice para ese campo.

Para un índice ascendente en un campo, especifica un valor de 1. Para un índice descendente, especifica un valor de -1.

Un asterisco (*) no es un nombre de índice válido.

MongoDB admite varios tipos de índices diferentes, incluidos:

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

Los índices comodín son compatibles con cargas de trabajo en las que los usuarios realizan queries sobre campos personalizados o una gran 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 información, consulta índices comodín.

options

Documento

Optional. A document that contains a set of options that controls the creation of the index. See Options for details.

entero o cadena de texto

Opcional. El número mínimo de nodos votantes con datos de un set de réplicas que contienen datos (es decir, quórum de confirmación), incluido el primario, que debe informar de una creación de índices exitosa antes de que el primario marque el indexes como listo. Un nodo "votante" es cualquier nodo del set de réplicas donde members[n].votes es mayor que 0.

Admite los siguientes valores:

  • "votingMembers" - todos los nodos votantes con datos del set de réplicas (por defecto).

  • "majority" - una mayoría simple de los nodos votantes con datos del set de réplicas.

  • <int> - un número específico de nodos votantes con datos del set de réplicas.

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

El documento options contiene un conjunto de opciones que controla la creación del índice. Los diferentes tipos de índices pueden tener opciones adicionales específicas para cada tipo.

Multiple index options can be specified in the same document. However, if you specify multiple option documents the db.collection.createIndex() operation fails.

Consider the following db.collection.createIndex() operation:

db.collection.createIndex(
{
"a": 1
},
{
unique: true,
sparse: true,
expireAfterSeconds: 3600
}
)

Si la especificación de opciones se hubiera dividido en varios documentos como este: { unique: true }, { sparse: true, expireAfterSeconds: 3600 }, la operación de creación del índice habría fallado.

Las siguientes opciones están disponibles para todos los tipos de índice, a menos que se especifique lo contrario:

Parameter
Tipo
Descripción

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.

name

string

Opcional. El nombre del índice. Si no se especifica, MongoDB genera un nombre de índice concatenando los nombres de los campos indexados y el orden de clasificación.

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:

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 claves de índice 2dsphere y claves de otros tipos, solo los campos de índice 2dsphere determinan si el índice hace referencia a un documento.

Los índices parciales tienen un superconjunto de la funcionalidad del índice disperso. A menos que la aplicación tenga un requisito específico, se deben usar índices parciales en lugar de índices dispersos.

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. Una bandera que determina si el índice está oculto para el planificador de queries. Un índice oculto no se evalúa como parte de la selección del plan de la query.

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.

Parameter
Tipo
Descripción

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.

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.

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.

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.

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

Las claves de índice sensibles a la intercalación pueden ser más grandes que las claves de índice que no la utilizan, ya que los índices configurados con intercalación utilizan claves de intercalación ICU para lograr un orden de clasificación.

Las siguientes opciones están disponibles solo para los índices de texto:

Parameter
Tipo
Descripción

weights

Documento

Optional. For text indexes, a document that contains field and weight pairs. The weight is an integer ranging from 1 to 99,999 and denotes the significance of the field relative to the other indexed fields in terms of the score. You can specify weights for some or all the indexed fields. See Assign Weights to Text Search Results to adjust the scores. The default value is 1.

A partir de MongoDB 5.0, la opción pesos solo está permitida para los índices de texto.

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 Lenguajes de búsqueda de texto en implementaciones autogestionadas para los lenguajes disponibles y Especificar el lenguaje para índices de texto en MongoDB autogestionado para 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.

La siguiente opción está disponible únicamente para índices 2dsphere:

Parameter
Tipo
Descripción

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.

Las siguientes opciones están disponibles solo para los índices 2d:

Parameter
Tipo
Descripción

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 de los valores de longitud y latitud. El valor es por defecto -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.

Los índices comodín pueden usar la opción wildcardProjection.

Parameter
Tipo
Descripción

wildcardProjection

Documento

Opcional. Permite a los usuarios incluir o excluir rutas de campo específicas de un índice comodín.

Esta opción solo es válida cuando se crea un índice comodín en todos los campos del documento. No se puede especificar la opción wildcardProjection al crear un índice comodín en una ruta de campo específica y sus subcampos.

wildcardProjection funciona con especificaciones tales como:

{ "$**": 1 }
{ "userID":, "$**": 1 }

Sin embargo, no puedes definir un índice que incluya el mismo campo en los campos comodín y en los campos regulares (no comodín). Para definir correctamente el índice, utilice un wildcardProjection para excluir los campos duplicados del patrón comodín.

wildcardProjection no funciona con una especificación como:

``{ "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.

Para obtener más información, consulta:

If you call db.collection.createIndex() for an index that already exists, MongoDB does not recreate the index.

Con la excepción de la opción de intercalación, si se crea un índice con un conjunto de opciones de índice y luego intenta volver a crear el mismo índice, pero con opciones de índice diferentes, MongoDB no cambiará las opciones ni volverá a crear el índice.

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

To change the other index options, drop the existing index with db.collection.dropIndex() before running db.collection.createIndex() with the new options.

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.

To hide or unhide existing indexes, you can use the following mongosh methods:

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

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

To use db.collection.createIndex() in a transaction, the transaction must use read concern "local". If you specify a read concern level other than "local", the transaction fails.

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.

To set the commit quorum, use createIndex() to specify the commitQuorum value.

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.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

Nota

Los document en la colección movies contienen campos adicionales que no se muestran aquí.

El siguiente ejemplo crea un índice ascendente en el campo orderDate.

db.collection.createIndex( { orderDate: 1 } )

If the keys document specifies more than one field, then createIndex() creates a compound index.

El siguiente ejemplo crea un índice compuesto en los campos year, runtime y title:

db.movies.createIndex( { year: 1, runtime: 1, title: 1 } )

El siguiente ejemplo crea un índice compuesto en el campo state (en orden ascendente) y en el campo zipcode (encriptado):

db.collection.createIndex( { "state" : 1, "zipcode" : "hashed" } )

Para obtener más información sobre los índices encriptados, consulte Índices encriptados.

Utiliza el siguiente código para crear un índice en la colección movies de la base de datos sample_mflix con la configuración regional de intercalación "fr" para comparaciones de string:

db.movies.createIndex( { title: 1 }, { collation: { locale: "fr" } } )

La siguiente query, que especifica la misma intercalación que el índice, puede utilizar el índice:

db.movies.find(
{ title: "Les Misèrables" },
{ title: 1, year: 1 }
).collation( { locale: "fr" } )

Sin embargo, la siguiente operación de query, que por defecto utiliza el comparador binary "simple", no puede utilizar el índice y requiere un COLLSCAN.

db.movies.find( { title: "Les Misèrables" }, { title: 1 , year: 1 } )

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, puedes utilizar el siguiente código para crear un índice compuesto en la colección movies de la base de datos sample_mflix, especificando los campos numéricos year y metacritic y el campo string title. El índice también especifica la intercalación "fr" para las comparaciones de string:

db.movies.createIndex(
{ year: 1, metacritic: 1, title: 1 },
{ collation: { locale: "fr" } }
)

Las siguientes operaciones, que utilizan la intercalación binaria "simple" para las comparaciones de strings, pueden usar el índice:

db.movies.find(
{ year: 2012 },
{ title: 1, year: 1, metacritic: 1 }
).sort( { title: 1 } )
db.movies.find(
{ year: 2012, metacritic: { $gt: Decimal128( "50" ) } },
{ title: 1, year: 1, metacritic: 1 }
).sort( { title: 1 } )

La siguiente operación, que utiliza la intercalación binaria "simple" para las comparaciones de string en el campo title indexado, puede usar el índice para cumplir solo con la parte year: 2012 de la query:

db.movies.find( { year: 2012, title: "Les Misèrables" }, { year: 1, title: 1 } )

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.

db.products_catalog.insertMany( [
{
_id : ObjectId("5c1d358bf383fbee028aea0b"),
product_name: "Jeans",
product_attributes: {
price: {
cost: 29.99,
currency: "USD"
}
}
},
{
_id: ObjectId("5c1d358bf383fbee028aea0c"),
product_name: "Sweater",
product_attributes: {
washable: true,
size: [ "small", "medium", "large" ]
}
}
] )

La siguiente operación crea un índice comodín en el campo product_attributes:

use inventory
db.products_catalog.createIndex( { "product_attributes.$**" : 1 } )

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.washable" : true } )
db.products_catalog.find( { "product_attributes.maxSize" : { $gt : 20 } } )
db.products_catalog.find( { "product_attributes.colors" : { $eq: "blue" } } )
db.products_catalog.insertMany( [
{
_id : ObjectId("5c1d358bf383fbee028aea0b"),
product_name: "Jeans",
product_attributes: {
price: {
cost: 29.99,
currency: "USD"
}
}
},
{
_id: ObjectId("5c1d358bf383fbee028aea0c"),
product_name: "Sweater",
product_attributes: {
washable: true,
size: [ "small", "medium", "large" ]
}
}
] )

La siguiente operación crea un índice comodín en todos los campos escalares (excluyendo el campo _id):

use inventory
db.products_catalog.createIndex( { "$**" : 1 } )

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.colors" : { $eq: "blue" } } )
db.products_catalog.insertMany( [
{
_id : ObjectId("5c1d358bf383fbee028aea0b"),
product_name: "Jeans",
product_attributes: {
price: {
cost: 29.99,
currency: "USD"
}
}
},
{
_id: ObjectId("5c1d358bf383fbee028aea0c"),
product_name: "Sweater",
product_attributes: {
washable: true,
size: [ "small", "medium", "large" ]
}
}
] )

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.colors y product_attributes.material en el índice.

use inventory
db.products_catalog.createIndex(
{ "$**" : 1 },
{
"wildcardProjection" : {
"product_attributes.colors" : 1,
"product_attributes.material" : 1
}
}
)

The pattern "$**" includes all fields in the document. Use the wildcardProjection field to limit the index to fields you specify. For complete documentation on wildcardProjection, see Options for wildcard indexes.

Si un campo es un documento o un arreglo anidado, el índice comodín se adentra en él e indexa todos los campos escalares del documento o del arreglo.

El índice comodín admite consultas en cualquier campo escalar incluido en el wildcardProjection:

db.products_catalog.find( { "product_attributes.colors" : { $eq: "Blue" } } )
db.products_catalog.find( { "product_attributes.material" : "Cotton" } )

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.

db.products_catalog.insertMany( [
{
_id : ObjectId("5c1d358bf383fbee028aea0b"),
product_name: "Jeans",
product_attributes: {
price: {
cost: 29.99,
currency: "USD"
}
}
},
{
_id: ObjectId("5c1d358bf383fbee028aea0c"),
product_name: "Sweater",
product_attributes: {
washable: true,
size: [ "small", "medium", "large" ]
}
}
] )

Este ejemplo utiliza un índice comodín y un documento wildcardProjection para indexar los campos escalares de cada documento de la colección.

El índice comodín excluye los campos product_attributes.colors y product_attributes.material:

use inventory
db.products_catalog.createIndex(
{ "$**" : 1 },
{
"wildcardProjection" : {
"product_attributes.colors" : 0,
"product_attributes.material" : 0
}
}
)

El patrón comodín "$**" incluye todos los campos del documento. Sin embargo, el campo wildcardProjection excluye los campos especificados del índice.

For complete documentation on wildcardProjection, see Options for wildcard indexes.

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 puede tener soporte para queries en cualquier campo escalar excepto aquellos excluidos por wildcardProjection:

db.products_catalog.find( { "product_attributes.maxSize" : { $gt: 25 } } )
db.products_catalog.find( { "product_attributes.washable" : 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.

The following operation creates an index with a commit quorum of "majority", or a simple majority of data-bearing voting members:

db.getSiblingDB("examples").invoices.createIndex(
{ "invoices" : 1 },
{ },
"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.