Operaciones CRUD con MongoDB y Node.js en un Servicio de Productos
Clase 12 de 24 • Curso de NestJS: Persistencia de Datos con MongoDB
Contenido del curso
- 4

Configuración y ejecución de MongoDB con Docker Compose
08:51 - 5

Conexión a Base de Datos MongoDB con Mongo Compass
05:05 - 6

Instalación y conexión de MongoDB en Node con driver oficial
06:59 - 7

Inyección de Conexiones MongoDB en Servicios NestJS
06:57 - 8

Consultas a MongoDB con Nest.js: Implementación de Endpoints
04:46 - 9

Variables de Entorno para Configuración de MongoDB en Node.js
10:43
- 10

Instalación y Configuración de Mongoose con NestJS
07:52 - 11

Definición de Esquemas en Mongoose para eCommerce con NestJS
07:45 - 12

Operaciones CRUD con MongoDB y Node.js en un Servicio de Productos
09:29 - 13

Creación, actualización y eliminación de productos en MongoDB
10:12 - 14

Validación de MongoID con Pipes en NestJS
06:38 - 15

Paginación en MongoDB con DTOs y Validaciones en NestJS
11:13 - 16

Consultas Avanzadas con Rangos de Precios en MongoDB
07:30 - 17

Indexación en MongoDB: Cómo optimizar consultas rápidas
03:11
- 18

Relaciones embebidas en MongoDB: Manejo y ejemplos prácticos
07:55 - 19

Relaciones uno a uno referenciadas en MongoDB
12:20 - 20

Relaciones Uno a Muchos en MongoDB: Arrays Embebidos vs Referenciados
09:28 - 21
Tipado de Documentos Embebidos en NestJS con Mongoose
01:49 - 22

Relaciones Uno a Muchos Referenciadas en MongoDB
14:36 - 23

Manipulación de Arrays en E-commerce: Métodos y Endpoints
13:08
Establecida la conexión a la base de datos con Mongoose y creadas las entidades que mapean la información, es momento de realizar las consultas a la base de datos desde los servicios.
Ejecutando consultas con Mongoose
Aquí tienes una serie de pasos que te ayudarán durante este proceso.
Paso 1: importación del esquema en los servicios
Comienza inyectando el esquema creado en el servicio que será el responsable de realizar las consultas.
// modules/products/products.service.ts
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
@Injectable()
export class ProductsService {
constructor(@InjectModel(Product.name) private productModel: Model<Product>) {}
findAll() {
return this.productModel.find().exec();
}
findOne(id: string) {
return this.productModel.findById(id).exec();
}
}
Utilizando InjectModel, inyectas el esquema de productos en el servicio de productos.
Paso 2: importación del servicio en los controladores
Los servicios son los responsables de realizar las consultas a la base de datos, pero los controladores son quienes determinan cuándo hay que realizar esas consultas.
// module/products/products.controller.ts
@Controller('products')
export class ProductsController {
@Get()
async getAll() {
return await this.productsService.findAll();
}
@Get(':productId')
async getOne(@Param('productId') productId: string) {
return await this.productsService.findOne(productId);
}
}
Crea tantos endpoints como necesites para responder a la necesidad de obtención de los datos a través de GET.
Así, ya tienes completada tu conexión a la base de datos y obtención de datos en tu API a través de Mongoose y sus esquemas.
Contribución creada por: Kevin Fiorentino (Platzi Contributor).
Código de ejemplo para conectar Mongo a los servicios
// src/products/services/products.service.ts
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
...
@Injectable()
export class ProductsService {
constructor(
@InjectModel(Product.name) private productModel: Model<Product>, // 👈
) {}
...
findAll() { // 👈
return this.productModel.find().exec();
}
async findOne(id: string) { // 👈
const product = await this.productModel.findById(id).exec();
if (!product) {
throw new NotFoundException(`Product #${id} not found`);
}
return product;
}
...
}
// src/products/controllers/products.controller.ts
@Controller('products')
export class ProductsController {
...
@Get(':productId')
getOne(@Param('productId') productId: string) { // 👈
return this.productsService.findOne(productId);
}
}
// src/users/services/users.service.ts
@Injectable()
export class UsersService {
...
async getOrderByUser(id: number) { // 👈
const user = this.findOne(id);
return {
date: new Date(),
user,
products: await this.productsService.findAll(), // 👈 implement await
};
}
}