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}
2) Create database folder for collect database connector
mkdir database
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>')
 }
}
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 {}
5) Run below command line to create CRUD application by nest-cli
nest g res ${YOUR_ENTITY}
cd ${YOUR_ENTITY}
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],
  },
]
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();
  }
}
    
Top comments (0)