Docs Menu
Docs Home
/ /

db.createCollection() (método mongosh)

db.createCollection(name, options)

Crea una nueva colección. Para puntos de vista,db.createView() véase.

Dado que MongoDB crea una colección implícitamente cuando se hace referencia a la colección por primera vez en un comando, este método se utiliza principalmente para crear nuevas colecciones que empleen opciones específicas. Por ejemplo, utilizas db.createCollection() para crear:

db.createCollection() es un contenedor alrededor del comando de base de datos create.

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

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 método db.createCollection() tiene el siguiente formato de prototipo:

db.createCollection( <name>,
{
capped: <boolean>,
timeseries: { // Added in MongoDB 5.0
timeField: <string>, // required for time series collections
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3
bucketRoundingSeconds: <number> // Added in MongoDB 6.3
},
expireAfterSeconds: <number>,
clusteredIndex: <document>, // Added in MongoDB 5.3
changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0
size: <number>,
max: <number>,
storageEngine: <document>,
validator: <document>,
validationLevel: <string>,
validationAction: <string>,
indexOptionDefaults: <document>,
viewOn: <string>,
pipeline: <pipeline>,
collation: <document>,
writeConcern: <document>
}
)

El método db.createCollection() tiene los siguientes parámetros:

Parameter
Tipo
Descripción

name

string

El nombre de la colección que se va a crear. Consulta Restricciones de nombres.

options

Documento

Opcional. Opciones de configuración para crear una:

  • Colección con tamaño fijo

  • Colección con índice clusterizado

  • vista

El documento options contiene los siguientes campos:

Campo
Tipo
Descripción

capped

booleano

Opcional. Para crear una colección con tamaño fijo, especifica true. Si especificas true, también debes establecer un tamaño máximo en el campo size.

timeseries.timeField

string

Requerido al crear una colección de series de tiempo. El nombre del campo que contiene la fecha en cada documento de serie de tiempo. Los documentos en una colección de series de tiempo deben tener una fecha BSON válida como valor para el timeField.

timeseries.metaField

string

Opcional. El nombre del campo que contiene metadatos en cada documento de serie de tiempo. Los metadatos en el campo especificado deben ser datos utilizados para etiquetar una serie única de documentos. Los metadatos deberían cambiar rara vez, o nunca.

El nombre del campo especificado no puede ser _id ni el mismo que el timeseries.timeField. El campo puede ser de cualquier tipo excepto un arreglo.

timeseries.granularity

string

Opcional, no lo utilices si se configura bucketRoundingSeconds y bucketMaxSpanSeconds. Los valores posibles son seconds (por defecto), minutes y hours.

Configura granularity al valor que más se asemeje al intervalo de tiempo entre las marcas de tiempo entrantes consecutivas. Esto mejora el rendimiento al optimizar cómo MongoDB almacena internamente los datos en la colección.

Para obtener más información sobre la granularidad y los intervalos de agrupación, consulta Configurar granularidad para datos de series de tiempo.

timeseries.bucketMaxSpanSeconds

entero

Opcional, se utiliza con bucketRoundingSeconds como una alternativa a granularity. Establece el tiempo máximo entre marcas de tiempo en el mismo bucket. Los valores posibles son de 1 a 31536000. Si configuras bucketMaxSpanSeconds, debes configurar bucketRoundingSeconds al mismo valor.

Para degradar a una versión anterior a MongoDB 6.3, debes modificar la colección para utilizar el valor granularity correspondiente o descartar la colección. Para obtener más detalles, consulta collMod.

timeseries.bucketRoundingSeconds

entero

Opcional, se utiliza con bucketMaxSpanSeconds como una alternativa a granularity. Establece el número de segundos para redondear hacia abajo cuando MongoDB establece la marca de tiempo mínima para un nuevo bucket. Debe ser igual a bucketMaxSpanSeconds.

Por ejemplo, al establecer ambos parámetros en 1800, los nuevos intervalos se redondean a los 30 minutos más cercanos. Si un documento con una marca de tiempo de 2023-03-27T18:24:35Z no encaja en un bucket existente, MongoDB crea un nuevo bucket con un tiempo mínimo de 2023-03-27T18:00:00Z y un tiempo máximo de 2023-03-27T18:30:00Z.

expireAfterSeconds

Número

Opcional. Especifica los segundos después de los cuales los documentos en una colección de series de tiempo o colección con índice clusterizado expiran. MongoDB elimina automáticamente los documentos caducados.

Para colecciones con índice clusterizado, los documentos se eliminan automáticamente en función de la clave de índice agrupada _id y los valores deben ser de tipo fecha. Consulta los índices TTL.

clusteredIndex

Documento

A partir de MongoDB 5.3, puedes crear una colección con un índice agrupado. Los índices agrupados se almacenan en el mismo archivo WiredTiger de la colección. La colección resultante se llama colección con índice clusterizado.

El campo clusteredIndex tiene la siguiente sintaxis:

clusteredIndex: {
key: <object>,
unique: <boolean>,
name: <string>
}
key
Requerido. El campo clave del índice agrupado. Debe estar configurado en { _id: 1 }. El valor por defecto del campo _id es un objectId único generado automáticamente, pero puedes establecer tus propios valores de clave de índice agrupado.
unique
Requerido. Debe establecerse en true. Un índice único indica que la colección no aceptará documentos insertados o actualizados si el valor de la clave del índice agrupado coincide con un valor ya existente en el índice.
name
Opcional. Un nombre que identifica de manera única el índice agrupado.

Novedades en la versión 5.3.

changeStreamPreAndPostImages

Documento

Opcional.

A partir de MongoDB 6.0, puedes utilizar eventos de flujo de cambios para generar la versión de un documento antes y después de los cambios (las imágenes previas y posteriores del documento):

  • La imagen previa es el documento antes de reemplazarlo, actualizarlo o borrarlo. No existe una imagen previa para un documento insertado.

  • La imagen posterior es el documento tras insertarse, sustituirse o actualizarse. No hay imagen posterior para un documento borrado.

  • Activa changeStreamPreAndPostImages para una colección con db.createCollection(), create o collMod. Por ejemplo, cuando se utiliza el comando collMod:

    db.runCommand( {
    collMod: <collection>,
    changeStreamPreAndPostImages: { enabled: true }
    } )

changeStreamPreAndPostImages tiene la siguiente sintaxis:

changeStreamPreAndPostImages: {
enabled: <boolean>
}

Para habilitar las imágenes previas y posteriores del flujo de cambios para la colección, se debe establecer enabled en true.

Para obtener ejemplos completos con la salida del flujo de cambios, consulta Flujos de cambio con imágenes previas y posteriores de documentos.

Para un ejemplo de db.createCollection() en esta página, se debe consultar Crear una colección con imágenes previas y posteriores de Change Stream para documentos.

Novedades en la versión 6.0.

size

Número

Opcional. Especifica un tamaño máximo en bytes para una colección con tamaño fijo. Una vez que una colección con tamaño fijo alcanza su tamaño máximo, MongoDB remueve los documentos más antiguos para dejar espacio a los nuevos documentos. El campo size es obligatorio para las colecciones con tamaño fijo y se ignora para las demás colecciones.

max

Número

Opcional. El número máximo de documentos permitidos en la colección con tamaño fijo. El límite de size tiene prioridad sobre este límite. Si una colección con tamaño fijo alcanza el límite size antes de alcanzar el número máximo de documentos, MongoDB remueve los documentos antiguos. Si prefieres usar el límite de max, asegúrate de que el límite de size, que es necesario para una colección con tamaño fijo, sea suficiente para contener el número máximo de documentos.

storageEngine

Documento

Opcional. Disponible solo para el motor de almacenamiento WiredTiger.

Permite a los usuarios especificar la configuración para el motor de almacenamiento por colección al crear una colección. El valor de la opción storageEngine debe tomar la siguiente forma:

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

La configuración del motor de almacenamiento especificada al crear colecciones se valida y se registra en el oplog durante la replicación para soportar conjuntos de set de réplicas con miembros que utilizan diferentes motores de almacenamiento.

A partir de MongoDB 7.2, no se pueden especificar opciones de cifrado del motor de almacenamiento wiredTiger al crear una colección con db.createCollection(). Para configurar el cifrado para el motor de almacenamiento WiredTiger, consulta Cifrado en reposo.

Para obtener detalles, consulte Especificar opciones del motor de almacenamiento.

validator

Documento

Opcional. Permite a los usuarios especificar reglas o expresiones de validación para la colección.

La opción validator requiere un documento que especifique las reglas o expresiones de validación. Puedes especificar las expresiones utilizando los mismos operadores que los operadores del query, con la excepción de $near, $nearSphere, $text, y $where.

Para aprender a crear una colección con validación de esquema, consulta Especificar la validación de esquemas JSON.

validationLevel

string

Opcional. Determina con qué rigor MongoDB aplica las reglas de validación a los documentos existentes durante una actualización.

"off"
No hay validación para inserciones o actualizaciones.
"strict"
Por defecto, aplica reglas de validación a todas las inserciones y a todas las actualizaciones.
"moderate"
Aplica reglas de validación a las inserciones y a las actualizaciones en documentos válidos existentes. No apliques reglas a las actualizaciones en documentos inválidos existentes.

Para ver un ejemplo que utiliza validationLevel, consulte Especificar nivel de validación para documentos existentes.

validationAction

string

Opcional. Determina si se debe mostrar error en documentos no válidos o solo warn sobre las infracciones, pero permite que se inserten documentos no válidos.

IMPORTANTE: La validación de documentos solo se aplica a aquellos documentos según lo determinado por el validationLevel.

Para ver un ejemplo que utiliza validationAction, consulte Elija cómo gestionar documentos no válidos.

indexOptionDefaults

Documento

Opcional. Permite a los usuarios especificar una configuración por defecto para los índices al crear una colección.

La opción indexOptionDefaults acepta un documento storageEngine, el cual debe tener la siguiente forma:

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

La configuración del motor de almacenamiento especificada al crear índices se valida y se registra en el oplog durante la replicación para admitir sets de réplicas con miembros que utilizan diferentes motores de almacenamiento.

viewOn

string

El nombre de la colección o vista de origen desde la cual crear una vista. Para obtener más detalles, consulta db.createView().

pipeline

arreglo

Un arreglo que consta de las etapas de la canalización de agregación. db.createView() crea una vista aplicando el pipeline especificado a la colección o vista viewOn. Para obtener más detalles, consulta db.createView().

collation

Documento

Especifica la intercalación por defecto para la colección.

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.

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.

Si especificas una intercalación a nivel de colección:

  • Los índices de esa colección se crearán con esa intercalación a menos que la operación de creación del índice especifique explícitamente una intercalación diferente.

  • Las operaciones en esa colección utilizan la intercalación por defecto de la colección, a menos que especifiquen explícitamente una intercalación diferente.

    No puedes especificar varias intercalaciones para una operación. Por ejemplo, no puedes especificar diferentes intercalaciones por campo, o si realizas una búsqueda con un ordenamiento, no puedes usar una intercalación para la búsqueda y otra para el ordenamiento.

Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings.

Para una colección, solo puedes especificar la intercalación durante la creación de la colección. Una vez establecida, no puedes modificar la intercalación por defecto de la colección.

Para un ejemplo, ver Especificar la intercalación.

writeConcern

Documento

Opcional. Un documento que expresa el nivel de confirmación de escritura para la operación. Omite usar el nivel de confirmación de escritura por defecto.

Cuando se emite en un clúster particionado, mongos convierte el nivel de confirmación de escritura del comando create y su asistente db.createCollection() a "majority".

Si la implementación aplica autenticación/autorización, db.createCollection() requiere los siguientes privilegios:

Tarea
Privilegios requeridos

Crea una colección no limitada

createCollection en la base de datos, o

insert en la colección a crear

convertToCapped para la colección

createCollection en la base de datos

Crear una vista

createCollection en la base de datos.

Sin embargo, si el usuario tiene createCollection en la base de datos y find en la vista que desea crear, el usuario también debe tener los siguientes permisos adicionales:

  • find en la colección o vista de origen.

  • find en cualquier otra colección o vista referenciada en el pipeline, si corresponde.

Un usuario con el rol incorporado readWrite en la base de datos tiene los privilegios necesarios para ejecutar las operaciones enumeradas. O crea un usuario con el rol requerido o concede el rol a un usuario existente.

db.createCollection() tiene el siguiente comportamiento:

db.createCollection() obtiene un bloqueo exclusivo en la colección o vista especificada durante la duración de la operación. Todas las operaciones posteriores en la colección deben esperar hasta que db.createCollection() libere el bloqueo. db.createCollection() normalmente mantiene este bloqueo durante un breve período de tiempo.

Crear una vista requiere obtener un bloqueo exclusivo adicional en la colección system.views de la base de datos. Este bloqueo impide la creación o modificación de vistas en la base de datos hasta que el comando se complete.

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 utilizar db.createCollection() en una transacción, la transacción debe emplear el nivel de consistencia de lectura "local". Si especificas un nivel de consistencia de lectura distinto de "local", la transacción fallará.

Tip

Si ejecutas db.createCollection() con el mismo nombre y opciones que una colección o vista existente, db.createCollection() indica éxito.

Las colecciones con tamaño fijo tienen un tamaño máximo o un número máximo de documentos que les impiden crecer más allá de los umbrales establecidos. Todas las colecciones con tamaño fijo deben especificar un tamaño máximo y también pueden especificar un número máximo de documentos. MongoDB remueve los documentos más antiguos si una colección alcanza el límite de tamaño máximo antes de alcanzar el número máximo de documentos. Considera el siguiente ejemplo:

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

Este comando crea una colección llamada log con un tamaño máximo de 5 megabytes y un máximo de 5000 documentos.

Consulta colecciones con tamaño fijo para obtener más información sobre las colecciones con tamaño fijo.

Para crear una colección de series de tiempo que capture datos meteorológicos de las últimas 24 horas, ejecuta este comando:

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
granularity: "hours"
},
expireAfterSeconds: 86400
}
)

Alternativamente, para crear la misma colección pero limitar cada bucket a valores de marca de tiempo dentro de la misma hora, ejecuta este comando:

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
bucketMaxSpanSeconds: 3600,
bucketRoundingSeconds: 3600
},
expireAfterSeconds: 86400
}
)

El siguiente db.createCollection() ejemplo agrega una colección con índice clusterizado denominada stocks:

db.createCollection(
"stocks",
{ clusteredIndex: { "key": { _id: 1 }, "unique": true, "name": "stocks clustered key" } }
)

En el ejemplo, clusteredIndex indica:

  • "key": { _id: 1 }, que establece la clave del índice agrupado en el campo _id.

  • "unique": true, lo que indica que el valor de la clave del índice agrupado debe ser único.

  • "name": "stocks clustered key", que define el nombre del índice clúster.

A partir de MongoDB 6.0, puedes utilizar eventos de flujo de cambios para generar la versión de un documento antes y después de los cambios (las imágenes previas y posteriores del documento):

  • La imagen previa es el documento antes de reemplazarlo, actualizarlo o borrarlo. No existe una imagen previa para un documento insertado.

  • La imagen posterior es el documento tras insertarse, sustituirse o actualizarse. No hay imagen posterior para un documento borrado.

  • Se debe habilitar changeStreamPreAndPostImages para una colección con db.createCollection(), create, o collMod. Por ejemplo, cuando se utiliza el comando collMod:

    db.runCommand( {
    collMod: <collection>,
    changeStreamPreAndPostImages: { enabled: true }
    } )

El siguiente ejemplo crea una colección que tiene changeStreamPreAndPostImages habilitado:

db.createCollection(
"temperatureSensor",
{ changeStreamPreAndPostImages: { enabled: true } }
);

Las imágenes previas y posteriores no están disponibles para un evento de flujo de cambios si las imágenes fueron:

  • No está habilitado en la colección en el momento de la operación de actualización o eliminación de un documento.

  • Eliminado después del tiempo de retención de imágenes previas y posteriores establecido en expireAfterSeconds.

    • El siguiente ejemplo configura expireAfterSeconds en 100 segundos en todo el clúster:

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )

      Nota

      El comando setClusterParameter no es compatible con los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no compatibles en Atlas.

    • El siguiente ejemplo devuelve la configuración actual de changeStreamOptions, incluyendo expireAfterSeconds:

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • Configurar expireAfterSeconds en off utiliza la política de retención por defecto: las imágenes previas y posteriores se conservan hasta que los eventos correspondientes del flujo de cambios se eliminan del oplog.

    • Si se elimina un evento de flujo de cambios del oplog, las imágenes previas y posteriores correspondientes también se eliminan independientemente del tiempo de retención de las imágenes previas y posteriores expireAfterSeconds.

Consideraciones adicionales:

  • Habilitar las imágenes previas y posteriores consume espacio de almacenamiento y aumenta el tiempo de procesamiento. Habilita solo las imágenes previas y de publicación si las necesitas.

  • Limita el tamaño del evento del flujo de cambios a menos de 16 mebibytes. Para limitar el tamaño del evento, puedes:

    • Limita el tamaño del documento a 8 megabytes. Puedes solicitar imágenes previas y posteriores simultáneamente en la salida del flujo de cambios si otros campos de eventos del flujo de cambios como updateDescription no son grandes.

    • Solicita solo imágenes posteriores en la salida del flujo de cambios para documentos de hasta 16 mebibytes si otros campos de eventos del flujo de cambios como updateDescription no son grandes.

    • Solicita solo imágenes previas en la salida del flujo de cambios para documentos de hasta 16 mebibytes si:

      • las actualizaciones de documento afectan solo a una pequeña fracción de la estructura o el contenido del documento, y

      • no cause un evento de cambio replace. Un evento replace siempre incluye la imagen de publicación.

  • Para realizar una solicitud de imagen previa, debes establecer fullDocumentBeforeChange en required o whenAvailable en db.collection.watch(). Para solicitar una imagen posterior, establece fullDocument mediante el mismo método.

  • Las imágenes previas se escriben en la colección config.system.preimages.

    • La colección config.system.preimages puede agrandarse. Para limitar el tamaño de la colección, puedes establecer el tiempo a expireAfterSeconds para las imágenes previas como se mostró antes.

    • Las imágenes previas se eliminan de forma asincrónica mediante un proceso en segundo plano.

Importante

Característica incompatible con versiones anteriores

A partir de MongoDB 6.0, si utilizas imágenes previas y posteriores de documentos para los flujos de cambios, debes deshabilitar changeStreamPreAndPostImages para cada colección mediante el comando collMod antes de poder volver a una versión anterior de MongoDB.

Tip

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.

Puedes especificar intercalación a nivel de la colección o vista. Por ejemplo, la siguiente operación crea una colección, especificando una intercalación para la colección (Consulta el Documento de intercalación para descripciones de los campos de intercalación):

db.createCollection( "myColl", { collation: { locale: "fr" } } );

Esta intercalación será utilizada por los índices y las operaciones que admiten la intercalación, a menos que especifiquen explícitamente una intercalación diferente. Por ejemplo, inserta los siguientes documentos en myColl:

{ _id: 1, category: "café" }
{ _id: 2, category: "cafe" }
{ _id: 3, category: "cafE" }

La siguiente operación utiliza la intercalación de la colección:

db.myColl.find().sort( { category: 1 } )

La operación devuelve los documentos en el siguiente orden:

{ "_id" : 2, "category" : "cafe" }
{ "_id" : 3, "category" : "cafE" }
{ "_id" : 1, "category" : "café" }

La misma operación en una colección que utiliza intercalación binaria simple (es decir, no se ha establecido una intercalación específica) devuelve documentos en el siguiente orden:

{ "_id" : 3, "category" : "cafE" }
{ "_id" : 2, "category" : "cafe" }
{ "_id" : 1, "category" : "café" }

Puedes especificar opciones de configuración específicas del motor de almacenamiento para la colección cuando crees una colección con db.createCollection(). Considera la siguiente operación:

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } }
)

Esta operación crea una nueva colección denominada users con una string de configuración específica que MongoDB pasará al motor de almacenamiento wiredTiger.

Por ejemplo, para especificar el compresor zlib para bloques de archivos en la colección users, configura la opción block_compressor con el siguiente comando:

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "block_compressor=zlib" } } }
)

A partir de MongoDB 7.2, no puedes especificar opciones de cifrado del motor de almacenamiento wiredTiger al crear una colección con db.createCollection(). Para configurar el cifrado para el motor de almacenamiento WiredTiger, consulta cifrado en reposo.

Volver

db.commandHelp

En esta página