Validación de Datos en MongoDB: JSON Schema y Actualizaciones

Clase 11 de 22Curso de Modelado de Datos en MongoDB

Contenido del curso

Relaciones

Resumen

Controlar qué datos entran a una colección de MongoDB va más allá de definir campos obligatorios. Existe la posibilidad de bloquear propiedades adicionales para que ningún documento incluya atributos inesperados, y también de actualizar un JSON Schema sin borrar la colección ni sus datos. Estas dos técnicas son fundamentales para mantener la integridad de la información en entornos productivos.

¿Cómo restringir propiedades adicionales en un JSON Schema?

MongoDB, por naturaleza, permite agregar cualquier atributo nuevo a un documento sin necesidad de migraciones. Si insertas un campo como social_accounts que no está definido en el validator, Mongo lo acepta sin problema [01:23]. Esa flexibilidad es una ventaja frente a bases de datos relacionales, donde agregar una columna implica crear toda una migración.

Sin embargo, hay escenarios de negocio donde se necesita que todos los documentos compartan exactamente la misma estructura. Para lograrlo se utiliza la propiedad additionalProperties dentro del JSON Schema [02:18]:

  • Por defecto su valor es true, lo que permite campos extra.
  • Al colocarlo en false, MongoDB rechaza cualquier atributo que no esté declarado en properties.
  • Los campos marcados en required siguen siendo obligatorios y los demás permanecen opcionales, pero ningún campo fuera del schema será aceptado.

Cuando se activa esta restricción e intentas insertar un documento con un campo no definido, Mongo devuelve un error de validación indicando que ese atributo no está permitido [03:08]. Es un comportamiento similar al de una tabla relacional con columnas fijas.

¿Cuándo conviene activar esta restricción?

El consejo práctico es mantener additionalProperties en true salvo que el caso de negocio exija uniformidad estricta. La flexibilidad de MongoDB permite almacenar atributos específicos para ciertos documentos sin afectar al resto, y eso es valioso. Si un usuario necesita un campo particular, simplemente se agrega y, opcionalmente, se incluye en la validación como campo opcional [03:45].

¿Cómo consultar las validaciones existentes en una base de datos?

Antes de modificar un schema conviene saber qué validaciones ya existen. El comando db.getCollectionInfos() devuelve toda la definición de las colecciones, incluyendo su JSON Schema [04:35]. Esto resulta especialmente útil cuando:

  • No existe documentación sobre los schemas vigentes.
  • Se hereda una base de datos en producción.
  • Se necesita auditar la integridad del modelo de datos.

El resultado muestra cada colección con su validator, las expresiones regulares, los tipos de dato y el estado de additionalProperties.

¿Cómo actualizar un JSON Schema sin borrar la colección?

Para modificar la validación de una colección que ya contiene datos se utiliza el comando db.runCommand con la operación collMod [05:30]:

  • Se indica el nombre de la colección a modificar.
  • Se envía el validator completo con el JSON Schema actualizado.
  • MongoDB sobreescribe todo el validador, por lo que es necesario enviar la definición íntegra, no solo el campo que cambia.

javascript db.runCommand({ collMod: "users", validator: { $jsonSchema: { // definición completa del schema actualizado additionalProperties: true } } })

¿Qué permisos se necesitan para ejecutar collMod?

Un usuario con rol de lectura y escritura (readWriteAnyDatabase) no tiene permisos suficientes para ejecutar collMod [06:25]. Es necesario elevar el rol a Atlas Admin desde la sección de seguridad y acceso de la base de datos. Una vez actualizado el rol, el comando se ejecuta correctamente y el schema queda modificado sin perder ningún documento [07:15].

¿Cómo ejecutar solo una parte del script en el Playground?

Un tip útil al trabajar con el MongoDB Playground en Visual Studio Code: si seleccionas únicamente un fragmento de código, solo esa porción se ejecuta [07:30]. Hay que tener cuidado con la posición del cursor, porque si está en medio del archivo, MongoDB interpreta que debe ejecutar todo hasta ese punto.

La validación de datos en MongoDB abarca desde tipos básicos como números, strings y enums, hasta restricciones con valores mínimos, máximos y expresiones regulares. Dominar la administración de estos schemas —consultarlos con getCollectionInfos y actualizarlos con collMod— permite mantener la integridad del modelo sin sacrificar la operación. ¿Has encontrado un caso donde additionalProperties en false te haya resultado útil? Comparte tu experiencia en los comentarios.