DEV Community

Perm Chao
Perm Chao

Posted on

3 2

NestJS connect to MongoDB

TL;DR

  • Create database provider by useFactor here
  • Create database module import database provider and export
  • Create your entity and make own provider by inject database provider here
  • import own provider to use in service

1) Create NestJS application with command line

nest new ${YOUR_APP_NAME}
cd ${YOUR_APP_NAME}
Enter fullscreen mode Exit fullscreen mode

2) Create database folder for collect database connector

mkdir database
Enter fullscreen mode Exit fullscreen mode

3) Make Database Provider by use useFactory

useFactory syntax allows for creating providers dynamically

You can connect multi database source

/* 
<project path>/src/database/database.provider.ts
*/

import * as mongoose from 'mongoose';

export const firstDatabaseProvider = {
 provide: '<Provider name>',
 useFactory: async (): Promise<mongoose.Connection> => {
  return await mongoose.createConnection('<MongoDB URI>')
 }
}

export const secondDatabaseProvider = {
 provide: '<Provider name>',
 useFactory: async (): Promise<mongoose.Connection> => {
  return await mongoose.createConnection('<MongoDB URI>')
 }
}
Enter fullscreen mode Exit fullscreen mode

4) Make Database module

/* 
<project path>/src/database/database.module.ts
*/

import * as mongoose from 'mongoose';
import { firstDatabaseProvider, secondDatabaseProvider } from './database.provider';

@Module({
  providers: [firstDatabaseProvider, secondDatabaseProvider],
  exports: [firstDatabaseProvider, secondDatabaseProvider],
})
export class DatabaseModules {}
Enter fullscreen mode Exit fullscreen mode

5) Run below command line to create CRUD application by nest-cli

nest g res ${YOUR_ENTITY}
cd ${YOUR_ENTITY}
Enter fullscreen mode Exit fullscreen mode

6) Create entity provider by go to file ${YOUR_ENTITY}.provider.ts

You can learn how to create model, mongoose schema and mongoose document in NestJS docs Here

import { Connection } from 'mongoose';
import { Entity ,EntitySchema } from './entities/yourEntity';

// use second database
import { secondDatabaseProvider } from '../database/database.provider'

export const myEntityProviders = [
  {
    provide: '<First Entity Provider Name>',
    useFactory: (connection: Connection) => connection.model(Entity.name, EntitySchema),
    inject: [financialDocDBProvider.provide],
  },
]

Enter fullscreen mode Exit fullscreen mode

7) make service

// ${YOUR_ENTITY}.service.ts

import { Inject, Injectable } from '@nestjs/common';
import { Model } from 'mongoose';
import { myEntityDocument } from './entities/entity.entity';
import { myEntityProviders } from './entity.provider';


@Injectable()
export class EntityService {
  constructor(@Inject(myEntityProviders[0].provide) private entityModel: Model<myEntityDocument>) {}

  async create(): Promise<myEntityDocument> {
    const newObj = new this.entityModel()

    return newObj.save();
  }

  findAll(): Promise<myEntityDocument[]> {
    return this.entityModel.find().exec();
  }
}

Enter fullscreen mode Exit fullscreen mode

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay