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
/ /
Administración

collMod

collMod

collMod permite agregar opciones a una colección o modificar las definiciones de vista.

Tip

En mongosh, este comando también se puede ejecutar a través del hideIndex() y unhideIndex() 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.

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.

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 tiene la siguiente sintaxis:

Nota

A partir de MongoDB 4.2

  • Se eliminaron las opciones noPadding y usePowerOf2Sizes MMAPv1 para el comando collMod.

  • La definición de la vista pipeline no puede incluir la etapa $out o $merge. Si la definición del vista incluye una pipeline anidada (por ejemplo, la definición del vista incluye la etapa $lookup o $facet), esta restricción también se aplica a las pipelines 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.

index

La opción index puede modificar las siguientes propiedades de un índice existente:

Propiedad del índice
Descripción

expireAfterSeconds

El 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 tanto los valores antiguos como los nuevos para la propiedad cambiada: expireAfterSeconds_old y expireAfterSeconds_new.

Solo se puede modificar un índice TTL existente; es decir, un índice con una propiedad expireAfterSeconds. Si el índice no tiene una propiedad expireAfterSeconds, la operación genera un error con no expireAfterSeconds field to update.

Modificar la opción de índice expireAfterSeconds restablece el $indexStats para 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 expireAfterSeconds debe estar entre 0 y 2147483647, inclusive.

hidden

Un booleano que determina si el índice está oculto o no para el planificador de queries.

Si el valor de hidden cambia, el comando devuelve un documento que contiene tanto los valores antiguos como los nuevos de la propiedad modificada: hidden_old y hidden_new.

Sin embargo, si el valor de hidden no ha cambiado (es decir, ocultar un índice ya oculto o desocultar un índice ya no oculto), el comando omite los campos hidden_old y hidden_new de la salida.

Para ocultar un índice, se debe tener el valor featureCompatibilityVersion de 4.4 o superior.

Al modificar la opción de índice hidden se restablece el $indexStats para 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
}
} )
validator

Novedad en la versión 3.2.

validator permite a los usuarios especificar reglas o expresiones de validación para una colección. Para más información, consulta Validación de esquema.

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.

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, local y config.

  • No se puede especificar un validador para las colecciones de system.*.

validationLevel

Novedad en la versión 3.2.

El validationLevel determina cuán estrictamente 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.
validationAction

Novedad en la versión 3.2.

La opción validationAction determina si hay que error en documentos inválidos o simplemente warn sobre las infracciones pero permitir documentos invá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"
No es necesario que los documentos pasen la validación. Si el documento no pasa la validación, la operación de guardar registra el fallo de validación.

Para ver las especificaciones de validación de una colección, utiliza el método db.getCollectionInfos().

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.

viewOn

La colección o vista fuente subyacente para la vista. La definición de vista se determina aplicando la pipeline especificada a esta fuente.

Necesario si se modifica una vista en una implementación de MongoDB que se ejecuta con control de acceso.

pipeline

La pipeline de agregación que define la vista.

Nota

La definición de la vista pipeline no puede incluir la etapa $out o $merge. Si la definición del vista incluye una pipeline anidada (por ejemplo, la definición del vista incluye la etapa $lookup o $facet), esta restricción también se aplica a las pipelines anidadas.

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() 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.

db.runCommand( {
collMod: "myView",
viewOn: "activities",
pipeline: [
{ $match: { status: "Q" } },
{ $project: { user: 1, date: 1, description: 1} } ]
} )

Para habilitar la eliminación automática de documentos o cambiar el valor del parámetro expireAfterSeconds para una colección de series de tiempo existente, emite el siguiente comando de collMod:

db.runCommand({
collMod: <collection>,
expireAfterSeconds: <Number> || "off"
})

El campo expireAfterSeconds debe ser:

  • Un número decimal no negativo (>=0)

  • La string "off".

Un número especifica la cantidad de segundos después de los cuales los documentos expiran. La string "off" remueve el parámetro expireAfterSeconds y desactiva la remoción automática.

comment

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:

w

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.

Si la implementación aplica autenticación/autorización, debe contar con el siguiente privilegio para ejecutar el comando collMod:

Tarea
Privilegios requeridos

Modificar una colección de tamaño ilimitado

collMod en la base de datos

Modificar una vista

collMod en la base de datos y o bien:

  • no hay find en la vista para modificar, o

  • ambos find en la vista que se quiere modificar y find en la colección/vista de origen.

El rol con funcionalidad incorporada dbAdmin proporciona los privilegios necesarios.

El comando collMod obtiene un bloqueo de colección sobre la colección especificada mientras dura la operación.

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 }

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 que ya está oculto o mostrando un índice que ya está visible), 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.

El siguiente ejemplo añade un validador a una colección existente llamada contacts.

Nota

MongoDB 3.6 agrega el operador $jsonSchema para brindar soporte a la validación de esquemas 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"
} )

Con el moderate validationLevel, MongoDB aplica reglas de validación a las operaciones de inserción y a las operations de actualización en documentos existentes que ya cumplen con los criterios de validación. Las actualizaciones de los documentos existentes que no cumplen con los criterios de validación no se verifican para comprobar su validez.

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 el validationAction es solo warn, MongoDB solo registra el mensaje de infracció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, consulta Validación de esquemas.

Volver

cloneCollectionAsCapped

En esta página