Overview
Mongoose es una basada en Node.js Librería de modelado de datos de objetos (ODM) que proporciona modelado de datos basado en esquemas, validación, construcción de queries y enlaces de lógica empresarial.
Un ODM es similar a un Mapeador Objeto-Relacional (ORM) utilizado con bases de datos SQL tradicionales, pero está diseñado específicamente para el modelo de datos basado en documentos de MongoDB.
Tip
Compatibilidad de Mongoose
Para aprender sobre la compatibilidad de Mongoose con las diferentes versiones del servidor de MongoDB, consulta la página Compatibilidad de Mongoose en la documentación de Mongoose.
¿Qué es el modelado de datos de objetos?
El Modelado de Datos de Objetos (ODM) crea una relación estructurada entre el código de tu aplicación y los documentos de tu base de datos. Con un ODM como Mongoose, defines esquemas a nivel de aplicación que se asignan a colecciones de MongoDB y aplican estructura a los documentos dentro de esas colecciones.
MongoDB proporciona un modelo de datos flexible que te permite modificar el esquema de la base de datos a medida que tu aplicación evoluciona. Sin embargo, tu caso de uso podría requerir coherencia en la estructura de datos entre los documentos de una colección.
Mongoose aborda esta necesidad de coherencia proporcionando las siguientes características:
Define la estructura y los tipos de datos para tus documentos
Genera modelos a partir de esquemas para interactuar con colecciones
Aplicar reglas de validación de datos a nivel de aplicación
Ejecute lógica personalizada antes o después de las operaciones de la base de datos
Construye y ejecuta queries de base de datos con una API fluida.
Referenciar documentos de otras colecciones (similar a joins)
Cumplimiento del esquema
Mongoose aplica los esquemas a nivel de la aplicación. Definís un esquema que especifica la estructura de los documentos de una colección, incluidos los nombres de los campos, los tipos de datos y las reglas de validación. Mongoose valida los datos según este esquema antes de realizar operaciones en la base de datos.
El esquema y las reglas de validación existen solo en el código de tu aplicación Node.js. El propio servidor de MongoDB sigue sin estar al tanto de estas restricciones y acepta cualquier documento BSON válido que su aplicación envíe.
Modelado de datos
Mongoose requiere que definas esquemas y modelos antes de interactuar con tus colecciones. Este enfoque estructurado puede resultar familiar para los desarrolladores con experiencia en bases de datos relacionales u otros ORM.
La desventaja es la reducción de la flexibilidad. Al modificar tu estructura de datos, debes actualizar tus esquemas de Mongoose.
Validación de esquema
Mongoose valida datos de dos maneras. En primer lugar, al definir los tipos de campo en tu esquema, especificas qué tipos de datos permite cada campo. Mongoose rechaza las operaciones que intentan insertar datos que no coinciden con los tipos definidos.
En segundo lugar, puedes añadir reglas de validación específicas como campos obligatorios, valores mínimos o máximos, restricciones de longitud de strings o funciones de validación personalizadas.
Estas reglas de validación solo se aplican cuando se utiliza Mongoose en una aplicación Node.js. Otras aplicaciones o herramientas de base de datos pueden eludir estas reglas porque solo existen en tu código de aplicación.
Para obtener más información sobre cómo validar datos usando el driver de MongoDB Node.js junto con la funcionalidad incorporada de validación de esquema de MongoDB, consulta la guía Validación de esquema de MongoDB en el manual del servidor.
Trabajar con múltiples colecciones
Tanto Mongoose como el driver Node.js de MongoDB permiten combinar documentos de varias colecciones, lo que se asemeja a las uniones en las bases de datos relacionales.
Poblar en Mangosta
Mongoose proporciona el populate() Método para referenciar documentos de otras colecciones. Las referencias se definen en el esquema especificando la colección a la que hacen referencia. ObjectId es un tipo común para las referencias, pero Mongoose también admite el uso de otros tipos, como cadenas, números, UUID y búferes. Al realizar consultas, Mongoose puede reemplazar automáticamente estas referencias con los documentos reales.
Mongoose realiza operaciones de completar ejecutando múltiples consultas. Este enfoque puede ser útil en ciertos escenarios, como al trabajar con grandes exploraciones o cuando faltan índices.
$lookup en MongoDB
MongoDB proporciona la etapa de agregación $lookup para realizar una acción similar a los left outer joins entre colecciones en la misma base de datos. El controlador de MongoDB para Node.js te da acceso directo a esta funcionalidad a través de pipelines de agregación.
El operador $lookup se ejecuta como una única operación de canalización de agregación. Este enfoque puede ofrecer ventajas de rendimiento en algunos casos, pero el rendimiento real depende de factores como el tamaño de los datos, los índices disponibles y los patrones de consulta.
Comenzar a utilizar Mongoose
Para aprender a instalar Mongoose, conectarse a MongoDB y realizar operaciones CRUD mediante esquemas y modelos de Mongoose, consulte Tutorial de introducción de Mongoose.