Inyección de Conexiones MongoDB en Servicios NestJS
Clase 7 de 24 • Curso de NestJS: Persistencia de Datos con MongoDB
Contenido del curso
Database
- 4

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

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

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

Inyección de Conexiones MongoDB en Servicios NestJS
Viendo ahora - 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Manipulación de Arrays en E-commerce: Métodos y Endpoints
13:08 min
Próximos pasos
Veamos una forma de realizar la conexión a una base de datos MongoDB con el driver oficial.
Estableciendo la conexión asíncrona
Conectarse a una base de datos es un procedimiento asíncrono. Este puede ejecutarse de manera global al inicializar el proyecto NestJS y, posteriormente, gracias a las características de NestJS, inyectar la conexión en cualquier servicio para hacer consultas.
Paso 1: establecer la conexión de forma global
Creamos un módulo al que denominaremos DatabaseModule, que contiene la configuración de forma global para establecer la conexión a una base de datos, a la vez que inyecta un servicio denominado "MONGO". Este puede ser utilizado por cualquier otro servicio que requiere la conexión.
// src/database/database.module.ts import { MongoClient } from 'mongodb'; @Global() @Module({ providers: [ { provide: 'MONGO', useFactory: async () => { const uri = 'mongodb://mongo:secret@localhost:27017/nestjs_mongo?authSource=admin'; const client = new MongoClient(uri); await client.connect(); const database = client.db('platzi-store'); return database; }, }, ], exports: ['API_KEY', 'MONGO'], }) export class DatabaseModule {}
Paso 2: inyección del servicio
Inyectamos el servicio que lleva el nombre de "MONGO" en cualquier otro servicio que requiere su utilización.
// src/app.service.ts import { Db } from 'mongodb'; @Injectable() export class AppService { constructor(@Inject('MONGO') private database: Db,) {} }
De esta manera, solo usando el driver oficial de MongoDB, puedes crear un servicio reutilizable para establecer la conexión a tu base de datos.
Contribución creada por: Kevin Fiorentino.
Código de ejemplo de: conexión como inyectable
// src/database/database.module.ts import { MongoClient } from 'mongodb'; // 👈 Import MongoClient @Global() @Module({ providers: [ ... { provide: 'MONGO', useFactory: async () => { // 👈 Inject w/ useFactory const uri = 'mongodb://root:root@localhost:27017/?authSource=admin&readPreference=primary'; const client = new MongoClient(uri); await client.connect(); const database = client.db('platzi-store'); return database; }, }, ], exports: ['API_KEY', 'MONGO'], // 👈 add in exports })
// src/app.service.ts import { Injectable, Inject } from '@nestjs/common'; import { Db } from 'mongodb'; // 👈 Import DB Type @Injectable() export class AppService { constructor( // @Inject('API_KEY') private apiKey: string, @Inject('TASKS') private tasks: any[], @Inject('MONGO') private database: Db, @Inject(config.KEY) private configService: ConfigType<typeof config>, ) {} getHello(): string { const apiKey = this.configService.apiKey; const name = this.configService.database.name; return `Hello World! ${apiKey} ${name}`; } getTasks() { } // 👈 Create new method }