Mongoose es un ODM (Object Data Model) que proporciona una solución sencilla basada en esquemas para modelar los datos de su aplicación. Incluye conversión de tipo incorporada, validación, creación de consultas, enlaces de lógica de negocios y más, listos para usar.
Para iniciar un proyecto vamos a crear una carpeta e iniciar un proyecto con npm:
$ mkdir mongoose_app_test && cd mongoose_app_test
Iniciamos un proyecto con npm
$ npm init -y
Instalar el ODM Mongoose
$ npm i --save mongoose
Importar mongoose a nuestro proyecto, creamos un archivo database.js y añadimos el siguiente codigo
1 2const mongoose = require('mongoose'); 3mongoose.connect('mongodb://localhost:27017/example') 4
Cuando nos conectamos a mongodb usando la funcion connect acepta dos parámetros opcionales. El segundo parámetro es un objeto de opciones donde se puede especificar como el usuario y la contraseña, en caso de que sea necesario. y el tercer parámetro es una funcion que retorna el resultado despues de intentar conectarse a la base de datos. La misma puede utilizarse de dos formas
Ejemplo:
1 2// Nomal 3mongoose.connect(url, options, (err) => { 4 if (err) throw err; 5 console.log('Database Connected!'); 6}); 7 8// Promises 9 10mongoose.connect(url, options).then( 11 () => {/* Database Connected! */ }, 12 (err) => {/* Database Connection Error */} 13}); 14
Mongoose proporciona una increíble cantidad de funcionalidades para crear y trabajar con esquemas. Mongoose actualmente contiene ocho SchemaTypes que una propiedad se guarda como cuando se conserva a MongoDB. Son:
Para crear un esquema utilizaremos mongoose.Schema() a través del objeto mongoose, el cual recibirá un objeto como argumento por ejemplo:
Queremos crear un usuario que tenga las propiedades nombre, email, telefono entonces para crear ese esquema haremos lo siguiente:
Ejemplo 1:
1const userSchema = mongoose.Schema({ 2 name: String, 3 email: String, 4 phone: String, 5})
Ejemplo 2:
1const userSchema = mongoose.Schema({ 2 _id: mongosee.Schema.Types.ObjectId, 3 name: String, 4 email: String, 5 phone: String, 6 created_at: { 7 type: Date, 8 default: Date.now 9 } 10})
Ejemplo 3:
1const contactSchema = mongoose.Schema({ 2 _id: mongosee.Schema.Types.ObjectId, 3 name: String, 4 phone: String, 5 user: { 6 type: mongoose.Schema.Types.ObjectId, 7 ref: 'User' 8 }, 9 created_at: { 10 type: Date, 11 default: Date.now 12 } 13})
Hemos anteriormente creado dos esquemas los cuales son user y contact, los cuales nos ayudaran a crear los modelos User y Contact respectivamente usando el mongoose.model() a través del objecto mongoose.
Ejemplo 1:
1const User = mongoose.model('User', userSchema); 2const Contact = mongoose.model('Contact', contactSchema);
Hemos anteriormente creado dos modelos los cuales son User y Contact, los cuales nos ayudaran a crear usuarios y contactos respectivamente en la base de datos:
Ejemplo 1:
1const user = new User({ 2 name: 'John Doe', 3 email: 'john.doe@email.com', 4 phone: '+1 555 555 55 55' 5}) 6 7user.save((err) => { 8 if(err) throw err; 9 console.log('User created successfully!'); 10})
Hemos anteriormente insertado documentos con los dos modelos User y Contact, ahora el proceso de buscar es similar al crear solo que debemos conseguir el elemento que queremos, para ellos tenemos diferentes metodos tales como find(), findOne(), findById(), findByIdAndUpdate():
Ejemplo 1:
1const user = User.find({ 2 name: 'John Doe' 3})
Ejemplo 2:
1const contact = Contact.findById({ 2 _id: '632244bb405329d320cde2ae' 3})
Hemos anteriormente localizado documentos con los dos modelos User y Contact, ahora el proceso de actualizar es similar al crear solo que debemos conseguir el elemento que queremos actualizar, para ellos tenemos diferentes metodos tales como update(), updateOne():
Ejemplo 1:
1const user = User.find({ 2 name: 'John Doe' 3}) 4 5user.update({ name: 'John A. Doe'}).exec((err) => { 6 console.log("User updated!!!"); 7 mongoose.disconnect(); 8});
Ejemplo 2:
1const contact = Contact.find({ 2 name: 'Jane Doe' 3}) 4 5contact.updateOne({ 6 name: 'Jane M. Doe' 7}).exec()
Hemos anteriormente actualizado documentos con los dos modelos User y Contact, ahora el proceso de eliminar es similar al crear o buscar solo que debemos conseguir el elemento que queremos eliminar o usando el modelo segun el filtro suministrado, para lo cual contamos con diferentes metodos tales como deleteOne(), deleteMany() o usando la instancia del documento y usar el metodo delete:
Ejemplo 1:
1User.deleteOne({ name: 'John Doe' }, function (err) { 2 if (err) throw err; 3});
Ejemplo 2:
1User.deleteMany({ is_active: false }, function (err) { 2 if (err) throw err; 3});