먼저 required dependency 들을 다운로드해준다.
npm i @nestjs/mongoose mongoose
이후 AppModule
에 MongooseModule
을 import 해준다.
// app.module.ts
@Module({
imports: [MongooseModule.forRoot('mongodb://localhost/nest', {
connectionNmae: 'local-db',
})],
})
export class AppModule {}
여기서 MongoDB 와 연결하는 MongooseModule.forRoot()
는 mongoose.connect()
와 동일한 구성 객체를 받는다.
상단에서는 connectionName
을 생략해도되지만, 여러 connection 을 생성할 경우에는 각각의 connection 에 connectionName 을
부여해야한다
[mongoose connect] https://mongoosejs.com/docs/connections.html
mongoose 의 모든 것은 Schema 로부터 시작한다. 각 schema 는 MongoDB collection 과 mapping 되고
해당 collection 내에서 document 의 shape 을 정의한다.
export const CatSchema = new mongoose.Schema({
name: String,
age: Number,
breed: String,
});
정의한 schema 를 사용하려는 모듈에 import 한다.
이때, mongoose.forFeature()
를 사용하여 schema 를 model 에 등록 할 수 있다.
// cats.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { Cat, CatSchema } from './schemas/cat.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }], 'cats( collection Name)')],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
이후에는 @InjectModel()
decorator 를 사용하여 Cat
model 을 CatService
에서 사용 할 수 있다.
//cats.service.tsJS
import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Cat, CatDocument } from './schemas/cat.schema';
import { CreateCatDto } from './dto/create-cat.dto';
@Injectable()
export class CatsService {
constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}
async create(createCatDto: CreateCatDto): Promise<Cat> {
const createdCat = new this.catModel(createCatDto);
return createdCat.save();
}
async findAll(): Promise<Cat[]> {
return this.catModel.find().exec();
}
}
[mongoose schema] https://mongoosejs.com/docs/guide.html