Validación de Datos en MongoDB: JSON Schema y Actualizaciones
Clase 11 de 22 • Curso de Modelado de Datos en MongoDB
Resumen
¿Cómo restringir propiedades y mantener la flexibilidad en MongoDB?
MongoDB es conocido por su dinámica flexibilidad al manejar documentos, ofreciéndonos una base de datos NoSQL que se ajusta a nuestras necesidades. Pero, ¿qué sucede cuando queremos imponer ciertas restricciones a la estructura de nuestros documentos? Hoy exploraremos cómo hacerlo sin perder del todo esa flexibilidad tan preciada.
Restricción de propiedades opcionales y obligatorias
Un JSON Schema nos permite definir cuáles elementos de un documento son obligatorios y cuáles son opcionales. Algunos campos típicos que son requeridos en una base de datos de usuario son:
email
password
role
Aparte, podemos definir campos opcionales, como:
edad
estado civil
nombre
apellido
Sin embargo, algo que caracteriza a MongoDB es su flexibilidad para incluir campos nuevos que no estaban previamente definidos. Ejemplo: el campo social accounts
, que podría tener redes sociales como Twitter
y Facebook
. Mongo permite realizar estas inserciones sin problemas, preservando su naturaleza flexible.
Cómo restringir propiedades adicionales
Para limitar esta flexibilidad, podemos ajustar el JSON Schema para que no acepte propiedades adicionales. Esto se hace configurando additionalProperties
a false
. De esta manera, se obliga a que todos los documentos ingresados sigan una única estructura, con los campos estrictamente definidos.
{
"properties": {
"email": { "type": "string" },
"password": { "type": "string" },
"role": { "type": "string" },
"additionalProperties": false
}
}
Al insertar un documento que contenga un atributo no permitido, MongoDB rechazará la inserción, manteniendo un control estricto sobre la estructura de datos almacenada.
¿Por qué mantener las propiedades flexibles?
Aunque restringir las propiedades adicionales aumenta el control de estructura, sacrificarás parte de la flexibilidad que MongoDB ofrece. En entornos dinámicos, esta flexibilidad permite la adaptación a cambios rápidos sin necesidad de procesos complicados de migración, comúnmente necesarios en bases de datos relacionales. Por ello, considera mantener additionalProperties
en true
a menos que tu caso de negocio requiera lo contrario.
Actualización de un JSON Schema sin borrar documentos
Modificar un JSON Schema en una base de datos ya establecida es vital sin impactar los datos existentes. MongoDB nos permite ejecutar un comando que facilita esta tarea: runCommand
. Este comando nos permite actualizar la definición de validación de una colección sin eliminarla.
Para utilizarlo correctamente, debes enviar toda la estructura del validador, incluyendo el cambio que deseas realizar. Recuerda que el usuario que lo ejecute debe tener los permisos adecuados. Aquí te mostramos un ejemplo:
{
"runCommand": {
"collMod": "users",
"validator": {
"$jsonSchema": {
"properties": {
"email": { "type": "string" },
"password": { "type": "string" },
"role": { "type": "string" }
},
"additionalProperties": true
}
}
}
}
Gestión de permisos
A veces puedes encontrarte con errores de acceso al intentar actualizar el JSON Schema. Asegúrate de que tu usuario tenga roles apropiados como Atlas Admin
para ejecutar estos comandos sin problemas.
Ejecución selectiva en Visual Studio Code
Un consejo adicional es cómo manejar la ejecución de scripts en VSCode. Si seleccionas una parte específica de tu código, solo esa porción se ejecutará. Esto es útil para pruebas y depuraciones, asegurándote de que el puntero esté donde deseas ejecutar.
Estos conocimientos sobre la validación y administración de datos te ayudarán a mantener integridad y precisión en tus bases de datos MongoDB. ¡Sigue explorando y aprendiendo para aprovechar al máximo esta potente herramienta!