Un describe cómo Mongoose interpreta una colección: tipos, casting, defaults, validators, índices, middleware y opciones. Un enlaza ese schema con una colección y expone operaciones de lectura y escritura.
Schema
Model
Texto
Schema
→ reglas de Mongoose
→ Model
→ colección MongoDB
El schema del ODM no sustituye el schema real del servidor. Solo se aplica a operaciones que pasan por Mongoose.
Los defaults se aplican cuando el valor es undefined, no necesariamente cuando es null. En upserts pueden intervenir opciones como setDefaultsOnInsert; verifica el comportamiento exacto de la versión.
No uses defaults para ocultar datos viejos mal migrados.
price:{
type: Schema.Types.Decimal128,
validate:{validator(value){return value && value.toString()!=='0';},
message:'Price must be greater than zero'}}
Los validators síncronos o asíncronos sirven para reglas locales. No son adecuados para garantizar unicidad o consultar otra colección bajo concurrencia.
strict: true controla campos no definidos al construir o actualizar documentos. Puede descartarlos o producir errores según configuración.
No es una defensa suficiente contra operator injection: un atacante aún puede influir filtros, operadores y paths permitidos si copias input directamente.
Controla cómo se tratan campos desconocidos en filtros. Los defaults han cambiado entre versiones de Mongoose, por lo que debes fijar la política y probarla.
Un filtro reducido silenciosamente podría convertirse en una consulta más amplia de lo esperado. Valida y construye filtros explícitos.
Son útiles cuando las variantes comparten lifecycle y consultas. Si difieren mucho, una colección única puede generar muchos campos optional e índices complejos.
Methods actúan sobre documentos; statics sobre Model; query helpers encadenan queries.
Mantén lógica de infraestructura cerca del Model, pero evita esconder casos de uso completos, autorización o efectos externos dentro de métodos difíciles de probar.
Schema y Model aportan ergonomía, casting y validación dentro de Mongoose. No representan automáticamente las restricciones del servidor. Define tipos y opciones con intención, controla índices, valida updates y replica invariantes críticas en MongoDB.