Introducción

En este tema, aprenderemos a usar MongoDB, una base de datos NoSQL, junto con Mongoose, una biblioteca de modelado de datos para MongoDB y Node.js. Mongoose proporciona una solución sencilla y elegante para trabajar con datos en MongoDB, permitiendo definir esquemas y modelos que facilitan la validación y la manipulación de datos.

Contenido

Instalación de MongoDB y Mongoose

Instalación de MongoDB

Para instalar MongoDB, sigue las instrucciones específicas para tu sistema operativo en la documentación oficial de MongoDB.

Instalación de Mongoose

Para instalar Mongoose en tu proyecto Node.js, usa el siguiente comando:

npm install mongoose

Conexión a MongoDB

Para conectarte a una base de datos MongoDB usando Mongoose, primero necesitas importar Mongoose y luego usar el método connect para establecer la conexión.

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/miBaseDeDatos', {
  useNewUrlParser: true,
  useUnifiedTopology: true
}).then(() => {
  console.log('Conectado a MongoDB');
}).catch((error) => {
  console.error('Error al conectar a MongoDB:', error);
});

Definición de Esquemas y Modelos

Esquema

Un esquema en Mongoose define la estructura de los documentos dentro de una colección. Aquí hay un ejemplo de cómo definir un esquema para una colección de usuarios:

const { Schema } = mongoose;

const usuarioSchema = new Schema({
  nombre: {
    type: String,
    required: true
  },
  edad: {
    type: Number,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  fechaCreacion: {
    type: Date,
    default: Date.now
  }
});

Modelo

Un modelo en Mongoose es una clase que se crea a partir de un esquema y se utiliza para interactuar con la base de datos.

const Usuario = mongoose.model('Usuario', usuarioSchema);

Operaciones CRUD

Crear

Para crear un nuevo documento en la base de datos, usa el método save del modelo.

const nuevoUsuario = new Usuario({
  nombre: 'Juan Pérez',
  edad: 30,
  email: '[email protected]'
});

nuevoUsuario.save().then((usuario) => {
  console.log('Usuario creado:', usuario);
}).catch((error) => {
  console.error('Error al crear usuario:', error);
});

Leer

Para leer documentos de la base de datos, usa el método find del modelo.

Usuario.find().then((usuarios) => {
  console.log('Usuarios:', usuarios);
}).catch((error) => {
  console.error('Error al leer usuarios:', error);
});

Actualizar

Para actualizar un documento, usa el método findByIdAndUpdate.

Usuario.findByIdAndUpdate('idDelUsuario', { edad: 31 }, { new: true }).then((usuario) => {
  console.log('Usuario actualizado:', usuario);
}).catch((error) => {
  console.error('Error al actualizar usuario:', error);
});

Eliminar

Para eliminar un documento, usa el método findByIdAndDelete.

Usuario.findByIdAndDelete('idDelUsuario').then((usuario) => {
  console.log('Usuario eliminado:', usuario);
}).catch((error) => {
  console.error('Error al eliminar usuario:', error);
});

Validación y Middleware

Validación

Mongoose permite definir validaciones en los esquemas. Por ejemplo, podemos asegurarnos de que el campo email tenga un formato válido.

const usuarioSchema = new Schema({
  nombre: {
    type: String,
    required: true
  },
  edad: {
    type: Number,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true,
    match: /.+\@.+\..+/
  },
  fechaCreacion: {
    type: Date,
    default: Date.now
  }
});

Middleware

Mongoose también permite definir middleware que se ejecuta en diferentes etapas del ciclo de vida de un documento. Por ejemplo, podemos definir un middleware pre-save para realizar alguna acción antes de guardar un documento.

usuarioSchema.pre('save', function(next) {
  console.log('Antes de guardar el usuario:', this);
  next();
});

Ejercicios Prácticos

Ejercicio 1: Crear y Leer Usuarios

  1. Crea un nuevo usuario con los siguientes datos:

  2. Lee todos los usuarios de la base de datos y muestra los resultados en la consola.

Solución

const nuevoUsuario = new Usuario({
  nombre: 'Ana Gómez',
  edad: 25,
  email: '[email protected]'
});

nuevoUsuario.save().then((usuario) => {
  console.log('Usuario creado:', usuario);

  return Usuario.find();
}).then((usuarios) => {
  console.log('Usuarios:', usuarios);
}).catch((error) => {
  console.error('Error:', error);
});

Ejercicio 2: Actualizar y Eliminar Usuarios

  1. Actualiza la edad del usuario con el email [email protected] a 26.
  2. Elimina el usuario con el email [email protected].

Solución

Usuario.findOneAndUpdate({ email: '[email protected]' }, { edad: 26 }, { new: true }).then((usuario) => {
  console.log('Usuario actualizado:', usuario);

  return Usuario.findOneAndDelete({ email: '[email protected]' });
}).then((usuario) => {
  console.log('Usuario eliminado:', usuario);
}).catch((error) => {
  console.error('Error:', error);
});

Conclusión

En este tema, hemos aprendido a usar MongoDB con Mongoose en una aplicación Node.js. Hemos cubierto la instalación, conexión, definición de esquemas y modelos, y operaciones CRUD básicas. También hemos visto cómo realizar validaciones y usar middleware en Mongoose. Con estos conocimientos, estás preparado para manejar datos en MongoDB de manera eficiente y estructurada en tus aplicaciones Node.js.

Curso de Node.js

Módulo 1: Introducción a Node.js

Módulo 2: Conceptos Básicos

Módulo 3: Sistema de Archivos y E/S

Módulo 4: HTTP y Servidores Web

Módulo 5: NPM y Gestión de Paquetes

Módulo 6: Framework Express.js

Módulo 7: Bases de Datos y ORMs

Módulo 8: Autenticación y Autorización

Módulo 9: Pruebas y Depuración

Módulo 10: Temas Avanzados

Módulo 11: Despliegue y DevOps

Módulo 12: Proyectos del Mundo Real

© Copyright 2024. Todos los derechos reservados