Definición
collModcollModpermite agregar opciones a una colección o modificar las definiciones de vista.Tip
mongoshEn, este comando también se puede ejecutar a través delhideIndex()unhideIndex()Métodos auxiliares y.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.Nota
La vista modificada por este comando no se refiere a vistas materializadas. Para hablar de las vistas materializadas on-demand, se puede consultar
$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 tiene la siguiente sintaxis:
Nota
Comenzando en MongoDB 4.2
Se eliminan
collModlas opcionesnoPaddingyusePowerOf2SizesMMAPv para el comando.1La definición de vista
pipelineno puede incluir$outlas etapas ni. Si la definición de vista incluye$merge$lookup$facetuna canalización anidada (por ejemplo, la definición de vista incluye las etapas o), esta restricción también se aplica a las canalizaciones anidadas.
db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )
Para <collection or view>, se puede especificar el nombre de una colección o vista de la base de datos actual.
opciones
Opciones del índice
indexLa opción puede cambiar
indexlas siguientes propiedades de un índice existente:Propiedad del índiceDescripciónexpireAfterSecondsEl número de segundos que determina el umbral de caducidad de una colección de TTL.
Si tiene éxito, el comando devuelve un documento que contiene los valores antiguos y nuevos para la propiedad modificada:
expireAfterSeconds_oldyexpireAfterSeconds_new.Solo se puede modificar un índice TTL existente; es decir, un índice con una propiedad
expireAfterSeconds. Si el índice no tiene una propiedadexpireAfterSeconds, la operación genera un error conno expireAfterSeconds field to update.Modificar la opción de índice
expireAfterSecondsrestablece el$indexStatspara el índice.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
expireAfterSecondsdebe estar entre0y2147483647, inclusive.hiddenUn booleano que determina si el índice está oculto o no para el planificador de queries.
Si el valor de
hiddencambia, el comando devuelve un documento que contiene tanto los valores antiguos como los nuevos de la propiedad modificada:hidden_oldyhidden_new.Sin embargo, si el valor de
hiddenno ha cambiado (es decir, ocultar un índice ya oculto o desocultar un índice ya no oculto), el comando omite los camposhidden_oldyhidden_newde la salida.Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de
4.4o superior.Al modificar la opción de índice
hiddense restablece el$indexStatspara el índice si el valor cambia.Para cambiar las opciones de índice, especifique el patrón de clave o el nombre del índice existente y la opción u opciones de índice que desea cambiar:
db.runCommand( { collMod: <collection>, index: { keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <number>, // If changing the TTL expiration threshold hidden: <boolean> // If changing the visibility of the index from the query planner } } )
Validación de documentos
validatorNuevo en la versión 3.2.
validatorpermite a los usuarios especificar reglas o expresiones de validación para una colección. Para más información,consulte Validación de esquemas.La opción
validatorrequiere 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.Nota
La validación ocurre durante las actualizaciones e inserciones. Los documentos existentes no pasan por comprobaciones de validación hasta que se modifican.
No se puede especificar un validador para colecciones en las bases de datos
admin,localyconfig.No se puede especificar un validador para las colecciones de
system.*.
validationLevelNuevo en la versión 3.2.
El determina con qué rigor MongoDB aplica las reglas de validación a los documentos existentes durante una
validationLevelactualizació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.
validationActionNuevo en la versión 3.2.
La opción determina si se debe
validationActionaplicarerroren documentos no válidos owarnsolo aplicar en las infracciones pero permitir los documentos no válidos.Importante
La validación de documentos solo se aplica a aquellos documentos según lo determinado por el
validationLevel."error"- Los documentos predeterminados deben pasar la validación antes de la escritura. De lo contrario, la operación falla.
"warn"- Los documentos no necesitan pasar la validación. Si el documento no la supera, la operación de escritura registra el fallo.
Para ver las especificaciones de validación de una colección, utilice el db.getCollectionInfos() método.
Vistas
Nota
La vista modificada por este comando no se refiere a vistas materializadas. Para hablar de las vistas materializadas on-demand, se puede consultar $merge en su lugar.
viewOnLa colección o vista de origen subyacente para la vista. La definición de la vista se determina aplicando el especificado a este
pipelineorigen.Necesario si se modifica una vista en una implementación de MongoDB que se ejecuta con control de acceso.
pipelineLa pipeline de agregación que define la vista.
Nota
Necesario si se modifica una vista en una implementación de MongoDB que se ejecuta con control de acceso.
La definición de la vista es pública; es decir, las operaciones
db.getCollectionInfos()yexplainen 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.
db.runCommand( { collMod: "myView", viewOn: "activities", pipeline: [ { $match: { status: "Q" } }, { $project: { user: 1, date: 1, description: 1} } ] } )
Colecciones de series de tiempo
Para habilitar la eliminación automática de documentos o cambiar el expireAfterSeconds valor del parámetro para una colección de series de tiempo existente, emita el siguiente collMod comando:
db.runCommand({ collMod: <collection>, expireAfterSeconds: <Number> || "off" })
El campo expireAfterSeconds debe ser:
Un número decimal no negativo (
>=0)La cadena
"off".
Un número especifica la cantidad de segundos tras los cuales caducan los documentos. La cadena "off" elimina el parámetro expireAfterSeconds y desactiva la eliminación automática.
Adjuntar comentario
Opcional. Se puede adjuntar un comentario a este comando. El comentario debe ser un campo de nivel superior y puede ser cualquier tipo BSON válido. El comentario que se especifique aparece junto con los registros de este comando en las siguientes ubicaciones:
Mensajes de registro de mongod, en el campo
attr.command.cursor.comment.Salida del perfilador de base de datos, en el campo
command.comment.currentOpde salida, en el campocommand.comment.
Nivel de confirmación de escritura
Opcional. Un documento que expresa el nivel de confirmación de escritura del comando collMod.
Omite usar el nivel de confirmación de escritura por defecto.
Control de acceso
Si la implementación exige autenticación/autorización, debe tener el siguiente privilegio para ejecutar el collMod comando:
Tarea | Privilegios requeridos |
|---|---|
Modificar una colección de tamaño ilimitado |
|
Modificar una vista |
El rol con funcionalidad incorporada dbAdmin proporciona los privilegios necesarios.
Comportamiento
Bloqueo de recursos
El comando collMod obtiene un bloqueo de colección sobre la colección especificada mientras dura la operación.
Ejemplos
Cambiar el valor de caducidad de los índices
El siguiente ejemplo actualiza la propiedad expireAfterSeconds de un índice TTL existente { lastAccess: 1 } en una colección llamada user_log. La propiedad de expireAfterSeconds actual para el índice se establece en 1800 segundos (o 30 minutos) y el ejemplo cambia el valor a 3600 segundos (o 60 minutos).
db.runCommand({ collMod: "user_log", index: { keyPattern: { lastAccess: 1 }, expireAfterSeconds: 3600 } })
Si es exitosa, la operación devuelve un documento que incluye el valor anterior y el nuevo de la propiedad modificada:
{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }
Ocultar un índice del planificador de query
Nota
Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de 5.0 o superior.
El siguiente ejemplo oculta un índice existente en la colección orders. En concreto, la operación oculta el índice con la especificación { shippedDate: 1 } del planificador de query.
db.runCommand({ collMod: "orders", index: { keyPattern: { shippedDate: 1 }, hidden: true } })
Si es exitosa, la operación devuelve un documento que incluye el valor anterior y el nuevo de la propiedad modificada:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Nota
Si la operación es exitosa pero el valor hidden no ha cambiado (es decir, ocultando un índice ya oculto o mostrando un índice ya no oculto), el comando omite los campos hidden_old y hidden_new de la salida.
Para ocultar un índice de texto, se debe especificar el índice por name y no por keyPattern.
Agregar validación de documentos a una colección existente
El siguiente ejemplo agrega un validador a una colección existente llamada contacts.
Nota
MongoDB 3.6 agrega el $jsonSchema operador para admitir la validación del esquema JSON.
db.runCommand( { collMod: "contacts", validator: { $jsonSchema: { bsonType: "object", required: [ "phone" ], properties: { phone: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType : "string", pattern : "@mongodb\.com$", description: "must be a string and match the regular expression pattern" }, status: { enum: [ "Unknown", "Incomplete" ], description: "can only be one of the enum values" } } } }, validationLevel: "moderate", validationAction: "warn" } )
moderate validationLevelCon, MongoDB aplica reglas de validación para insertar y actualizar operaciones en documentos existentes que ya cumplen los criterios de validación. No se comprueba la validez de las actualizaciones de documentos existentes que no cumplen los criterios de validación.
warn validationActionCon, MongoDB registra cualquier violación pero permite que la inserción o actualización continúe.
Por ejemplo, la siguiente operación de inserción viola la regla de validación.
db.contacts.insertOne( { name: "Amanda", status: "Updated" } )
Sin embargo, dado que validationAction es solo warn, MongoDB solo registra el mensaje de violación de validación y permite que la operación continúe:
2017-12-01T12:31:23.738-05:00 W STORAGE [conn1] Document would fail validation collection: example.contacts doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }
Para obtener más información, consulte Validación de esquema.