[NestJS] MongoDB

Younghwan Cha·2023년 3월 23일
0

Nest.js

목록 보기
8/27
post-thumbnail
post-custom-banner

먼저 required dependency 들을 다운로드해준다.

npm i @nestjs/mongoose mongoose

이후 AppModuleMongooseModule 을 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

profile
개발 기록
post-custom-banner

0개의 댓글