Definición
createCrea explícitamente una colección o vista.
Nota
La vista creada con este comando no hace referencia a vistas materializadas. Para obtener información sobre vistas materializadas bajo demanda, consulte
$mergeen su lugar.
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 create tiene la siguiente sintaxis:
Nota
Comenzando en MongoDB 4.2
MongoDB elimina el1 motor de almacenamiento MMAPv y la1 opción específica MMAPv flags createpara.
db.runCommand( { create: <collection or view name>, capped: <true|false>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string> }, expireAfterSeconds: <number>, clusteredIndex: <document>, // Added in MongoDB 5.3 changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0 autoIndexId: <true|false>, size: <max_size>, max: <max_documents>, storageEngine: <document>, validator: <document>, validationLevel: <string>, validationAction: <string>, indexOptionDefaults: <document>, viewOn: <source>, pipeline: <pipeline>, collation: <document>, writeConcern: <document>, encryptedFields: <document>, comment: <any> }
Campos de comandos
El comando tiene los siguientes create campos:
Campo | Tipo | Descripción | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | El nombre de la nueva colección o vista.Consulte Restricciones de nombres. | ||||||||||||||||
| booleano | Opcional. Para crear una colección con tamaño fijo, especifica | ||||||||||||||||
| 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 | ||||||||||||||||
| 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 | ||||||||||||||||
| string | Opcional. Los valores posibles son | ||||||||||||||||
| 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. | ||||||||||||||||
Documento | A partir de MongoDB 5.3, puedes crear una colección con un índice agrupado. Las colecciones creadas con un índice de clústeres se denominan colecciones con índice clusterizado. Consultar Colecciones con índice clusterizado.
Novedades en la versión 5.3. | |||||||||||||||||
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):
Para habilitar las imágenes previas y posteriores del flujo de cambios para la colección, se debe establecer Para obtener ejemplos completos con la salida del flujo de cambios, consulta Flujos de cambio con imágenes previas y posteriores de documentos. Para Novedades en la versión 6.0. | |||||||||||||||||
| booleano | Opcional. Especifique ImportanteA partir de MongoDB 4.0, no se puede establecer la opción Obsoleto desde la versión 3.2. | ||||||||||||||||
| entero | 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 | ||||||||||||||||
| entero | Opcional. El número máximo de documentos permitidos en la colección con tamaño fijo. El límite de | ||||||||||||||||
| 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 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. Para obtener más información, consulte Especificar opciones del motor de almacenamiento. | ||||||||||||||||
| Documento | Opcional. Permite a los usuarios especificar reglas o expresiones de validación para la colección. Para más información,consulte Validación de esquemas. La opción
| ||||||||||||||||
| string | Opcional. Determina con qué rigor MongoDB aplica las reglas de validación a los documentos existentes durante una actualización.
| ||||||||||||||||
| string | Opcional. Determina si se debe mostrar La validación de documentos solo se aplica a aquellos documentos según lo determinado por el
| ||||||||||||||||
| Documento | Opcional. Permite a los usuarios especificar una configuración por defecto para los índices al crear una colección. La opción 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. | ||||||||||||||||
| string | El nombre de la colección o vista de origen desde la que se creará la vista. El nombre no es el espacio de nombres completo de la colección o vista; es decir, no incluye el nombre de la base de datos e implica la misma base de datos que la vista que se va a crear. Debe crear las vistas en la misma base de datos que la colección de origen. Consulte también | ||||||||||||||||
| arreglo | Una matriz que consta de las etapas de la canalización de agregación. Una definición de vista La definición de la vista es pública; es decir, las operaciones Consulte también | ||||||||||||||||
| Especifica la intercalación predeterminada para la colección o la vista. 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: Al especificar la intercalación, el campo Si especificas una intercalación a nivel de colección:
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 vista, si no se especifica ninguna intercalación, la intercalación predeterminada es la intercaladora de comparación binaria simple. Para una vista de una colección, la vista no hereda la configuración de intercalación de la colección. Para una vista de otra vista, la vista que se va a crear debe especificar la misma configuración de intercalación. Después de crear la colección o la vista, no es posible actualizar su intercalación predeterminada. Para ver un ejemplo que especifica la intercalación predeterminada durante la creación de una colección, consulte Especificar intercalación. | |||||||||||||||||
| 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, | ||||||||||||||||
| Documento | Opcional. Un documento que configura el cifrado consultable para la colección que se está creando. Para usar campos cifrados en una colección, especifique una nueva opción de configuración. Debe tener permisos para crear y modificar una colección para crear o editar esta configuración. La configuración incluye una lista de campos y sus identificadores clave correspondientes, tipos y queries compatibles. Para obtener más detalles, consulte Inicio rápido. | ||||||||||||||||
| 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.). Nuevo en la versión 4.4. |
El método db.createCollection() y el método db.createView() create envuelven el comando.
Comportamiento
Bloqueo de recursos
Cambiado en la versión 4.2.
create 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 create libere el bloqueo. create 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.
Transacciones
Cambiado en la versión 4.4.
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 create 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á.
Stable API
Modificado en la versión 5.0.
Al utilizar la API estable1 V, no puede especificar los siguientes campos en un create comando:
autoIndexIdcappedindexOptionDefaultsmaxsizestorageEngine
Control de acceso
Si la implementación aplica autenticación/autorización, create requiere los siguientes privilegios:
Tarea | Privilegios requeridos |
|---|---|
Crea una colección no limitada |
|
Crear una colección con tamaño fijo |
|
Crear una vista |
Sin embargo, si el usuario tiene |
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.
Ejemplos
Crea una colección con tamaño fijo
Para crear una colección limitada a 64 kilobytes, emita el comando en el siguiente formato:
db.runCommand( { create: "collection", capped: true, size: 64 * 1024 } )
Crear una colección de series de tiempo
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 } )
Nota
En este ejemplo,expireAfterSeconds se especifica como,86400 lo que significa que los documentos caducan 86400 segundos después del timestamp valor.Consulte "Configurar la eliminación automática de colecciones de series temporales (TTL)".
Crea una colección con índice clusterizado
El siguiente create ejemplo agrega una colección con índice clusterizado denominada products:
db.runCommand( { create: "products", clusteredIndex: { "key": { _id: 1 }, "unique": true, "name": "products 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": "products clustered key", que define el nombre del índice clúster.
Crea una colección con imágenes previas y posteriores de documentos para Change Streams
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.
Habilite
changeStreamPreAndPostImagespara una colección quedb.createCollection()createutilice,collModo.
El siguiente ejemplo crea una colección que tiene changeStreamPreAndPostImages habilitado:
db.runCommand( { create: "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
expireAfterSecondsen100segundos en todo el clúster:use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) El siguiente ejemplo devuelve la configuración actual de
changeStreamOptions, incluyendoexpireAfterSeconds:db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) Configurar
expireAfterSecondsenoffutiliza 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
updateDescriptionno 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
updateDescriptionno 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 eventoreplacesiempre incluye la imagen de publicación.
Para realizar una solicitud de imagen previa, debes establecer
fullDocumentBeforeChangeenrequiredowhenAvailableendb.collection.watch(). Para solicitar una imagen posterior, establecefullDocumentmediante el mismo método.Las preimágenes se escriben en la colección
config.system.preimages.La colección
config.system.preimagespuede agrandarse. Para limitar el tamaño de la colección, puedes establecer el tiempo aexpireAfterSecondspara 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
Para los eventos y resultados del flujo de cambios, consulta Eventos de cambio.
Para buscar cambios en una colección, consulta
db.collection.watch().Para obtener ejemplos completos con la salida del flujo de cambios, consulta Flujos de cambio con imágenes previas y posteriores de documentos.
Crear una Vista
Nota
La vista creada por este comando no hace referencia a vistas materializadas. Para obtener información sobre vistas materializadas bajo demanda,$merge consulte.
Cambiado en la versión 4.2.
Una definición de vista pipeline no puede incluir la etapa $out o la $merge. Esta restricción también se aplica a pipelines integradas, como las pipelines usadas en las etapas de $lookup o $facet.
Para crear una vista utilizando el comando, utilice la siguiente create sintaxis:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )
o si se especifica una intercalación:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
Por ejemplo, crea una colección survey con los siguientes documentos:
db.survey.insertMany( [ { _id: 1, empNumber: "abc123", feedback: { management: 3, environment: 3 }, department: "A" }, { _id: 2, empNumber: "xyz987", feedback: { management: 2, environment: 3 }, department: "B" }, { _id: 3, empNumber: "ijk555", feedback: { management: 3, environment: 4 }, department: "A" } ] )
La siguiente operación crea una vista managementRatings con los campos _id, feedback.management y department:
db.runCommand ( { create: "managementFeedback", viewOn: "survey", pipeline: [ { $project: { "management": "$feedback.management", department: 1 } } ] } )
Importante
La definición de la vista es pública; es decir, las operaciones db.getCollectionInfos() y explain en la vista incluirán el pipeline que define la vista. Por lo tanto, evite referirse directamente a campos y valores sensibles en las definiciones de vistas.
Especificar la intercalación
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.runCommand ( { create: "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é" }
Especifica las opciones del motor de almacenamiento
Puede especificar opciones de configuración del motor de almacenamiento específicas de la colección al crear una colección db.createCollection() con. Considere la siguiente operación:
db.runCommand( { create: "users", storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } } )
Esta operación crea una nueva colección llamada users con una cadena de configuración específica que MongoDB pasará al wiredTiger motor de almacenamiento. Consulte la documentación de WiredTiger sobre las opciones de nivel de colección.para opciones wiredTiger específicas.