Mantener la integridad de la información es uno de los retos más importantes cuando trabajas con bases de datos documentales. MongoDB ofrece gran flexibilidad, pero eso no significa que debas permitir documentos sin estructura ni reglas de negocio. Aquí aprenderás a definir validaciones desde lo más básico —los strings— para garantizar que cada documento cumpla con un estándar mínimo antes de ser almacenado.
¿Por qué MongoDB permite insertar datos incorrectos sin validación?
Cuando creas una colección de forma dinámica en MongoDB, cualquier documento es aceptado sin importar su contenido. Por ejemplo, al ejecutar un insertOne en la colección users dentro de la base de datos Platzi Store, puedes enviar un email como número entero y omitir campos esenciales como el nombre o el password [01:40]. MongoDB lo acepta sin problemas porque, por defecto, no existe ninguna restricción sobre la estructura del documento.
Este comportamiento es parte de la naturaleza flexible de las bases de datos NoSQL basadas en documentos. Sin embargo, genera un problema real: la corrupción de datos. Un usuario sin contraseña o con un email numérico no tiene sentido desde la lógica de negocio.
¿Cómo se define un JSON Schema para validar documentos?
Para resolver este problema, MongoDB permite crear colecciones de forma explícita con un validador basado en JSON Schema [03:28]. En lugar de dejar que la colección se genere dinámicamente, utilizas db.createCollection y le pasas un objeto con la propiedad validator, que a su vez contiene el operador $jsonSchema.
Dentro del JSON Schema defines la estructura esperada:
javascript
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email", "password"],
properties: {
name: { bsonType: "string" },
last_name: { bsonType: "string" },
email: { bsonType: "string" },
password: { bsonType: "string" }
}
}
}
})
¿Qué es el bsonType y por qué se usa en lugar de JSON?
El formato BSON (Binary JSON) soporta muchos más tipos de datos que el JSON estándar [04:00]. Mientras JSON se limita a strings, números, booleanos, arrays, objetos y null, BSON incluye tipos como double, date, expresiones regulares y booleanos específicos. Al declarar bsonType: "object", le indicas a MongoDB que cada documento insertado en esa colección debe ser un objeto, y luego defines el tipo de cada propiedad individual.
¿Cómo funcionan las propiedades requeridas y opcionales?
El atributo required se define como un array de strings con los nombres de las propiedades obligatorias [06:15]. En el ejemplo, email y password son requeridos: ningún documento puede existir sin ellos. En cambio, name y last_name son opcionales.
- Si no envías un campo opcional, el documento se crea sin él.
- Si envías un campo opcional con un tipo incorrecto (por ejemplo, un número en lugar de un string), MongoDB rechaza la inserción.
- Los campos requeridos deben estar presentes y respetar el tipo definido.
Esto significa que puedes aprovechar la flexibilidad de MongoDB para que algunos documentos tengan atributos adicionales, pero los campos críticos siempre estarán garantizados [07:10].
¿Qué pasa cuando intentas insertar un documento que viola el esquema?
Al intentar insertar un documento donde el email es un número después de haber configurado el JSON Schema, MongoDB devuelve un error de validación [05:20]. El documento simplemente no se almacena. Esto protege la integridad de la colección sin necesidad de validaciones externas para reglas básicas de tipo de dato.
Un detalle importante: si necesitas actualizar el esquema de validación, en principio debes eliminar la colección con db.collection.drop() y recrearla con el nuevo validador [07:40]. Este comando borra tanto los documentos como el esquema previo. Más adelante es posible actualizar el validador sin necesidad de borrar todo.
¿Dónde queda la validación avanzada como formato de email o fortaleza de contraseña?
MongoDB valida tipos de datos, no lógica de negocio compleja. Si necesitas verificar que un password tenga caracteres especiales, longitud mínima o que un email cumpla con un formato específico, esa validación corresponde a la capa de aplicación: una API construida con JavaScript, Python u otro lenguaje [08:25]. También es posible usar expresiones regulares dentro del esquema BSON para algunas de estas validaciones.
Entre los tipos disponibles en BSON puedes encontrar: string, double, object, array, boolean, date y regex, entre otros [09:00]. Cada uno te permite refinar la estructura de tus documentos según las necesidades del proyecto.
Si ya estás trabajando con MongoDB y quieres llevar tus validaciones más allá de los strings, en la siguiente lección se cubren booleanos, números y enums, que permiten restringir valores a un conjunto predefinido. ¿Qué reglas de validación consideras indispensables en tus colecciones? Comparte tu experiencia.