Mongoose es una biblioteca de objetos de modelado de documentos (ODM) para Node.js y MongoDB. Permite la definición de esquemas con tipado, validación y lógica de negocio para las colecciones de MongoDB. En otras palabras, Mongoose proporciona una capa de abstracción entre Node.js y MongoDB, lo que facilita la interacción con la base de datos.
Mongoose se puede instalar en Node.js utilizando NPM (Node Package Manager). Después de instalar Mongoose, se puede conectar a una base de datos de MongoDB local o remota utilizando la función connect()
. Aquí está un ejemplo básico de cómo conectar una aplicación de Node.js a una base de datos de MongoDB utilizando Mongoose:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('connected to database');
});
En este ejemplo, estamos conectando a una base de datos llamada «mydatabase» en MongoDB. También se han agregado algunas opciones de configuración para garantizar la compatibilidad con versiones futuras de MongoDB. Una vez que se ha establecido la conexión, se puede acceder a la base de datos y realizar operaciones CRUD (crear, leer, actualizar, eliminar) utilizando Mongoose.
Una de las principales características de Mongoose es su capacidad para definir esquemas con tipado y validación. Un esquema es una representación de la estructura de una colección en MongoDB. En Mongoose, los esquemas se definen utilizando la función Schema()
. Aquí hay un ejemplo de cómo definir un esquema de usuario utilizando Mongoose:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
age: Number,
email: {
type: String,
required: true,
unique: true
}
});
const User = mongoose.model('User', userSchema);
module.exports = User;
En este ejemplo, estamos definiendo un esquema de usuario que tiene tres campos: nombre, edad y correo electrónico. El nombre y el correo electrónico son campos obligatorios, mientras que la edad es opcional. También se ha agregado una validación adicional para garantizar que el correo electrónico sea único. Una vez que se ha definido el esquema, se puede crear un modelo de Mongoose utilizando la función model()
. El modelo se puede utilizar para realizar operaciones CRUD en la base de datos.
Otra característica útil de Mongoose es la capacidad de agregar lógica de negocio a los modelos. Por ejemplo, se puede agregar una función de instancia para validar las credenciales de un usuario al iniciar sesión. Aquí hay un ejemplo de cómo agregar una función de instancia al modelo de usuario:
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
age: Number,
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
}
});
userSchema.methods.isValidPassword = async function(password) {
const user = this;
const compare = await bcrypt.compare(password, user.password);
return compare;
};
const User = mongoose.model('User',