MongoDB 데이터베이스를 처리하는 방법에는 두 가지가 있습니다. MongoDB를 지원하는 ORM 또는 가장 인기있는 MongoDB 와 Mongoose를 사용할 수 있습니다. 객체 모델링 도구. ORM을 유지하려면 다음 단계를 수행하십시오. 그렇지 않으면 전용 @nestjs/mongoose 패키지를 사용합니다.
먼저 필요한 모든 종속성을 설치해야합니다.
$npminstall--save@nestjs/mongoosemongoose
설치 과정이 완료되면 MongooseModule을 루트 ApplicationModule로 가져올 수 있습니다.
CatsSchema는 cats 디렉토리에 속합니다. 이 디렉토리는 CatsModule을 나타냅니다. 스키마 파일을 유지할 위치는 결정입니다. 우리의 관점에서 볼 때 가장 좋은 방법은 적절한 모듈 디렉토리에 거의 도메인을 유지하는 것입니다.
CatsModule을 봅시다:
@@filename(cats.module)
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { CatSchema } from './schemas/cat.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: 'Cat', schema: CatSchema }])],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
이 모듈은 forFeature()메소드를 사용하여 현재 범위에 등록할 모델을 정의합니다. 덕분에 @InjectModel()데코레이터를 사용하여 CatModel을 CatsService에 삽입할 수 있습니다.
@@filename(cats.service)
import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Cat } from './interfaces/cat.interface';
import { CreateCatDto } from './dto/create-cat.dto';
@Injectable()
export class CatsService {
constructor(@InjectModel('Cat') private readonly catModel: Model<Cat>) {}
async create(createCatDto: CreateCatDto): Promise<Cat> {
const createdCat = new this.catModel(createCatDto);
return await createdCat.save();
}
async findAll(): Promise<Cat[]> {
return await this.catModel.find().exec();
}
}
@@switch
import { Model } from 'mongoose';
import { Injectable, Dependencies } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
@Injectable()
@Dependencies(InjectModel('Cat'))
export class CatsService {
constructor(catModel) {
this.catModel = catModel;
}
async create(createCatDto) {
const createdCat = new this.catModel(createCatDto);
return await createdCat.save();
}
async findAll() {
return await this.catModel.find().exec();
}
}
Testing
응용 프로그램을 단위 테스트하는 경우 일반적으로 데이터베이스 연결을 피하여 테스트 슈트를 독립적으로 만들고 실행 프로세스를 가능한 한 빨리 만듭니다. 그러나 클래스는 연결 인스턴스에서 가져온 모델에 따라 달라질 수 있습니다. 그럼 뭘가요? 해결책은 가짜 모델을 만드는 것입니다. 이를 달성하기 위해 custom provider를 설정해야 합니다. 실제로, 등록된 각 모델은 NameModel 토큰으로 표시되며 여기서 Name은 모델의 이름입니다.
@nestjs/mongoose 패키지는 주어진 모델 이름을 기반으로 준비된 토큰을 반환하는 getModelToken()함수를 제공합니다.