Contenido del curso

Validación de strings con JSON Schema en MongoDB

Resumen

MongoDB es flexible, pero esa flexibilidad no significa caos. Cuando aprendes a validar datos con JSON Schema en MongoDB, proteges la integridad de tus colecciones y aseguras que cada documento cumpla las reglas de negocio que tu aplicación necesita.

Esta guía te muestra cómo definir esquemas explícitos en una base de datos NoSQL documental, empezando por los strings, para que tus colecciones mantengan estructura sin perder la versatilidad que distingue a Mongo.

¿Por qué validar datos si MongoDB es una base NoSQL flexible?

La flexibilidad de las bases documentales permite que cada documento tenga atributos distintos, pero no protege la integridad de la información. Si insertas un usuario con un email numérico o sin password, Mongo lo aceptará por defecto.

Desde la terminal de VS Code conectada a MongoDB Atlas [01:45], al ejecutar db.users.insertOne() con un email en formato entero y sin nombre ni password, el documento se inserta sin error. Eso es justo lo que queremos evitar.

¿Qué es un BSON Type en MongoDB? Es el sistema de tipos que usa Mongo internamente y que soporta más formatos que JSON estándar, como double, date, array, bool o expresiones regulares.

¿Cómo se crea una colección con validador en MongoDB?

El método db.createCollection() recibe un objeto con la propiedad validator, donde defines un $jsonSchema que describe la estructura esperada [05:30].

El esquema base se construye así:

  • bsonType: "object" declara que cada documento es un objeto.
  • properties lista cada atributo del documento.
  • Dentro de cada propiedad, defines su bsonType esperado, por ejemplo string.

Un detalle importante: si la colección ya existe porque se creó dinámicamente con un insertOne previo, debes ejecutar un drop antes de aplicar el nuevo esquema. Por eso conviene tener un archivo drop.mongodb separado para borrar la colección y reiniciar las validaciones [07:50].

¿Cómo defino propiedades obligatorias y opcionales con required?

El arreglo required dentro del esquema indica qué campos no pueden faltar. El resto sigue siendo opcional, respetando la naturaleza flexible de Mongo.

En el ejemplo de la colección users, los campos email y password son obligatorios, mientras que name y lastName quedan opcionales [10:20]. La regla queda así:

  • Si envías email o password, deben existir y ser string.
  • Si envías name o lastName, también deben ser string, aunque puedes omitirlos.
  • Cualquier intento de insertar un documento sin password dispara un error de validación.

Esta combinación de required con bsonType te da control sin sacrificar dinamismo. Puedes seguir agregando atributos extra a documentos individuales y la colección los aceptará, siempre que se cumpla el mínimo definido.

¿Qué pasa si inserto un email numérico con un esquema activo? MongoDB rechaza el documento y lanza un error de document validation, evitando que datos inválidos lleguen a la colección.

¿Qué tipos de datos puedo validar con JSON Schema?

Gracias a BSON Type, el validador acepta una variedad amplia de tipos para reflejar reglas reales de negocio:

  • string para cadenas de texto como nombres o correos.
  • double o int para valores numéricos.
  • bool para banderas verdadero/falso.
  • date para marcas de tiempo.
  • array y object para estructuras anidadas.
  • regex para validar formato, por ejemplo longitud mínima y caracteres del password.

Las validaciones más finas, como verificar que un correo tenga formato usuario@dominio.com con caracteres específicos, suelen quedar en la capa de aplicación con JavaScript, Python u otro lenguaje. Mongo se enfoca en el tipo y la presencia del campo; tu API se encarga de las reglas de negocio detalladas.

¿Cómo se ve el flujo completo de validación en VS Code?

El flujo práctico para mantener la integridad sigue una secuencia clara dentro del MongoDB Playground [02:10]:

  1. Conectas a la base con use("platzi_store").
  2. Defines un archivo collection.mongodb con db.createCollection("users", { validator: { $jsonSchema: {...} } }).
  3. Si la colección ya existía, ejecutas db.users.drop() desde un archivo separado.
  4. Insertas documentos de prueba con db.users.insertOne({...}) y observas qué acepta o rechaza el validador.
  5. Consultas con db.users.find() para confirmar que solo entran documentos válidos.

Con este patrón conviertes una colección flexible en una colección confiable. Tus usuarios siempre tendrán email y password, los tipos serán consistentes y tu aplicación podrá confiar en la forma de los datos al leerlos.

¿Has aplicado validaciones con JSON Schema en tus propios proyectos? Cuéntame en los comentarios qué reglas de negocio te ha tocado modelar y cómo resolviste la tensión entre flexibilidad e integridad.