Contenido del curso
Proyecto
Validación de datos
Relaciones
- 12

Relaciones en Bases de Datos NoSQL: Embebidas y Referenciales
10:29 min - 13

Relaciones uno a uno embebidas en MongoDB
10:09 min - 14

Relaciones uno a uno con $lookup en MongoDB
09:52 min - 15

Relaciones Uno a Muchos: Embebidas y Referenciadas en Bases de Datos
10:46 min - 16

Relaciones Uno a Muchos con Referencias en Bases de Datos
15:19 min - 17

Relaciones Muchos a Muchos en Bases de Datos: Tiendas y Productos
14:31 min - 18

Relaciones Muchos a Muchos en Bases de Datos Documentales
07:04 min
Bonus: patrones
Próximos pasos
Validar arrays y subdocumentos en MongoDB
Resumen
Validar datos en MongoDB no se limita a tipos primitivos como string, number o boolean. Cuando trabajas con documentos reales, te encuentras con arrays anidados y subdocumentos que también requieren reglas claras para mantener la integridad de la información. Aquí aprendes a usar JSON Schema para validar estructuras complejas dentro de una colección NoSQL.
¿Cómo validar un array dentro de un documento en MongoDB?
Cuando un campo guarda varios valores, como las tallas de una camiseta, el tipo de dato deja de ser primitivo y pasa a ser un array. Para validarlo, defines el bsonType como array y luego describes qué reglas deben cumplir sus elementos.
Dentro de la colección products, imagina un campo sizes que almacena las tallas disponibles. La validación empieza así:
bsonType: arraypara indicar que el campo debe ser una lista.itemspara describir el tipo de cada elemento, en este casostring.uniqueItems: truepara evitar valores duplicados como dos veces la talla L.minItems: 1para asegurar que, si se envía el array, tenga al menos un elemento.
¿Qué hace
uniqueItemsen JSON Schema? Obliga a que todos los valores dentro del array sean diferentes. Si intentas insertar["L", "XL", "L"], la validación falla porque la L se repite [02:54].
Con estas reglas, el campo sizes es opcional, pero si llega vacío o con duplicados, MongoDB rechaza el documento. Así proteges la coherencia sin perder flexibilidad.
¿Por qué usar enum o string en items?
Usar enum limita los valores a una lista cerrada, por ejemplo solo S, M, L, XL. Es útil cuando manejas categorías muy controladas. Sin embargo, si la colección guarda productos diversos que no siempre se miden en tallas de ropa, conviene dejar string para mantener la reutilización del esquema.
Esta decisión es clave en bases NoSQL: defines suficiente estructura para cuidar la integridad, pero dejas margen para que el modelo crezca.
¿Cómo validar un subdocumento en MongoDB con JSON Schema?
Un subdocumento es un objeto anidado dentro de otro documento. En el ejemplo, cada producto tiene una category con su propio name e image. Para validarlo, anidas un nuevo JSON Schema dentro de la propiedad.
La estructura sigue este patrón:
- El campo
categoryse declara conbsonType: object. - Dentro defines
propertiespara describir cada atributo del subdocumento. - Marcas
namecomorequiredy dejasimagecomo opcional. - Cada propiedad interna también lleva su propio
bsonType, normalmentestring.
¿Qué pasa si falta un campo requerido en un subdocumento? MongoDB rechaza el insert completo. Si envías una categoría sin
name, aunque el resto del producto sea válido, la operación falla [07:30].
Esta capacidad de anidar esquemas dentro de esquemas es lo que permite trabajar con modelos ricos sin perder control. Cada nivel del documento puede tener sus propias reglas, tipos y campos obligatorios.
¿Cómo aplicar los cambios en una colección existente?
Cuando modificas un validador, necesitas hacer drop de la colección y volver a crearla con el nuevo JSON Schema. Ten en cuenta que esto borra los documentos existentes, así que en producción usarías collMod para actualizar el validador sin perder datos.
Después de recrear la colección, prueba estos casos para confirmar que las reglas funcionan:
- Insertar un producto solo con
namey sinsizes: debe pasar, porque el array es opcional. - Insertar un producto con
sizes: []: debe fallar porminItems: 1. - Insertar un producto con
sizes: ["L", "L"]: debe fallar poruniqueItems. - Insertar un producto con
categorysinname: debe fallar por campo requerido. - Insertar un producto válido con
name,sizes: ["XL"]ycategorycompleta: debe crearse sin problema.
¿Qué reglas adicionales puedes aplicar a arrays y objetos?
Más allá de los ejemplos básicos, JSON Schema ofrece varias palancas para afinar la validación. Estas son las que más usarás en colecciones reales:
minItemsymaxItemspara controlar el tamaño del array.uniqueItemspara evitar duplicados dentro de la lista.itemscon un esquema completo, no solo un tipo, para validar objetos dentro del array.requireddentro de un subdocumento para marcar campos obligatorios al nivel correcto.additionalProperties: falsepara impedir que se envíen campos no declarados.
La combinación de estas reglas convierte a MongoDB en una base flexible pero gobernada. Mantienes la libertad del modelo NoSQL y, al mismo tiempo, defines estándares claros que protegen tu información.
Un reto interesante para practicar es validar un campo password con expresiones regulares, exigiendo mínimo de caracteres, números y letras. ¿Cómo lo resolverías tú? Cuéntame en los comentarios qué reglas aplicarías y qué patrón usarías.