← Back to Lessons
Edit on Github

Implementación de mongoose con mongoDB

Usar mongodb utilizando el ODM Mongoose

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')

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});

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:

  1. String (Cadena)
  2. Number (Número)
  3. Date (Fecha)
  4. Buffer
  5. Boolean (Booleano)
  6. Mixed (Mixto)
  7. ObjectId
  8. Array (Matriz)

Definir un esquema de Mongoose

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})

Crear los modelos de Mongoose

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);

Guardar datos usando los modelos de Mongoose

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})

Seleccionar datos usando los modelos de Mongoose

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})

Actualizar datos usando los modelos de Mongoose

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()