MongoDB (Mongoose)
MongoDB (Mongoose)
๊ฒฝ๊ณ ์ด ๊ธฐ์ฌ์์๋ ์ปค์คํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ์๋ถํฐ Mongoose* ํจํค์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
DatabaseModule
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ์๋ฃจ์ ์๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฉ@nestjs/mongoose
ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์๋ตํ ์์๋ ๋ง์ ์ค๋ฒ ํค๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Mongoose์ ๊ฐ์ฅ ์ธ๊ธฐ์๋ MongoDB ๊ฐ์ฒด ๋ชจ๋ธ๋ง ๋๊ตฌ์ ๋๋ค.
Getting started
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ชจํ์ ์์ํ๋ ค๋ฉด ํ์ํ ๋ชจ๋ ์ข ์์ฑ์ ์ค์นํด์ผํฉ๋๋ค.
@@filename()
$ npm install --save mongoose
$ npm install --save-dev @types/mongoose
@@switch
$ npm install --save mongoose
๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ connect()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. connect()
ํจ์๋ Promise
๋ฅผ ๋ฐํํ๋ฏ๋ก async provider๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
@@filename(database.providers)
import * as mongoose from 'mongoose';
export const databaseProviders = [
{
provide: 'DATABASE_CONNECTION',
useFactory: (): Promise<typeof mongoose> =>
mongoose.connect('mongodb://localhost/nest'),
},
];
@@switch
import * as mongoose from 'mongoose';
export const databaseProviders = [
{
provide: 'DATABASE_CONNECTION',
useFactory: () => mongoose.connect('mongodb://localhost/nest'),
},
];
info ํํธ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ฐ๋ผ
* .providers.ts
์ ๋ฏธ์ฌ๊ฐ ์๋ ๋ณ๋์ ํ์ผ๋ก ์ฌ์ฉ์ ์ง์ ๊ณต๊ธ์๋ฅผ ์ ์ธํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ํด ์ก์ธ์คํ ์ ์๋๋ก ์ด๋ฌํ ๊ณต๊ธ์๋ฅผ ๋ด ๋ณด๋ด์ผํฉ๋๋ค.
@@filename(database.module)
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';
@Module({
providers: [...databaseProviders],
exports: [...databaseProviders],
})
export class DatabaseModule {}
์ด์ @Inject()
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ Connection
๊ฐ์ฒด๋ฅผ ์ฃผ์
ํ ์ ์์ต๋๋ค. Connection
๋น๋๊ธฐ ๊ณต๊ธ์์ ์์กดํ๋ ๊ฐ ํด๋์ค๋ Promise
๊ฐ ํด๊ฒฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
Model injection
Mongoose๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์คํค๋ง์์ ํ์๋ฉ๋๋ค. CatSchema
๋ฅผ ์ ์ ํด ๋ด
์๋ค :
@@filename(schemas/cats.schema)
import * as mongoose from 'mongoose';
export const CatSchema = new mongoose.Schema({
name: String,
age: Number,
breed: String,
});
CatsSchema
๋ cats
๋๋ ํ ๋ฆฌ์ ์ํฉ๋๋ค. ์ด ๋๋ ํ ๋ฆฌ๋ CatsModule
์ ๋ํ๋
๋๋ค.
์ด์ ๋ชจ๋ธ ๊ณต๊ธ์๋ฅผ ๋ง๋ค ์ฐจ๋ก์ ๋๋ค.
@@filename(cats.providers)
import { Connection } from 'mongoose';
import { CatSchema } from './schemas/cat.schema';
export const catsProviders = [
{
provide: 'CAT_MODEL',
useFactory: (connection: Connection) => connection.model('Cat', CatSchema),
inject: ['DATABASE_CONNECTION'],
},
];
@@switch
import { CatSchema } from './schemas/cat.schema';
export const catsProviders = [
{
provide: 'CAT_MODEL',
useFactory: (connection) => connection.model('Cat', CatSchema),
inject: ['DATABASE_CONNECTION'],
},
];
์๋ฆผ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ๋งค์ง ๋ฌธ์์ด์ ํผํด์ผํฉ๋๋ค.
CAT_MODEL
๊ณผDATABASE_CONNECTION
์ ๋ถ๋ฆฌ ๋constants.ts
ํ์ผ์ ๋ณด๊ดํด์ผ ํฉ๋๋ค.
์ด์ @Inject()
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ CAT_MODEL
์ CatsService
์ ์ฝ์
ํ ์ ์์ต๋๋ค :
@@filename(cats.service)
import { Model } from 'mongoose';
import { Injectable, Inject } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
import { CreateCatDto } from './dto/create-cat.dto';
@Injectable()
export class CatsService {
constructor(
@Inject('CAT_MODEL')
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 { Injectable, Dependencies } from '@nestjs/common';
@Injectable()
@Dependencies('CAT_MODEL')
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();
}
}
์์ ์์์ ์ฐ๋ฆฌ๋ Cat
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด ์ธํฐํ์ด์ค๋ ๋ชฝ๊ตฌ์ค ํจํค์ง์์ Document
๋ฅผ ํ์ฅํฉ๋๋ค:
import { Document } from 'mongoose';
export interface Cat extends Document {
readonly name: string;
readonly age: number;
readonly breed: string;
}
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋น๋๊ธฐ์ด์ง๋ง Nest๋ ์ต์ข
์ฌ์ฉ์๊ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์์ ํ ๋ณผ ์ ์๋๋กํฉ๋๋ค. CatModel
ํด๋์ค๋ db ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉฐ CatsService
๋ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๋๊น์ง ์ง์ฐ๋ฉ๋๋ค. ๊ฐ ํด๋์ค๊ฐ ์ธ์คํด์คํ ๋๋ฉด ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ ์ ์์ต๋๋ค.
๋ง์ง๋งCatsModule
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@@filename(cats.module)
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { catsProviders } from './cats.providers';
import { DatabaseModule } from '../database/database.module';
@Module({
imports: [DatabaseModule],
controllers: [CatsController],
providers: [
CatsService,
...catsProviders,
],
})
export class CatsModule {}
warning ํํธ
CatsModule
์ ๋ฃจํธApplicationModule
๋ก ๊ฐ์ ธ ์ค๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.
Last updated
Was this helpful?