NestJS MongoDB 사용하기2 - DB 스키마 생성

 안녕하세요. 알렉스입니다. 이번에는 NestJS을 이용하여 MongoDB의 스키마를 작성해서 collection을 만드는 글을 작성할려고 합니다. 


mongodb셋팅은 이전글을 참고해 주시기 바랍니다.

이전글 : NestJS MongoDB 사용하기1 - DB 접속


이제 NestJS안에 users resource를 생성하도록 하겠습니다.


NestJS resource 패키지 생성

NestJS CLI를 이용하여 controller, service, dto, entity를 자동으로 생성

$ nest g res


사진1) 생성할 resource 명칭 입력(users입력)


사진2) layer선택(REST API)

사진3) CRUD자동 생성 유무(Y)


사진1 ~ 3까지 진행하면 src폴더 안에 users이 생성된 것을 확인할수 있습니다. 먼저 /src/users/entities 폴더를 삭제하고 대신 schemas폴더를 생성합니다. 그리고 그안에 user.schema.ts 파일을 생성하고 아래와 같이 코드를 작성합니다.


// src/users/schemas/user.schema.ts

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';

@Schema({
timestamps: true, // document 작성시 시간 기록
})
export class Users {
@Prop() // 유저 id
id: string;

@Prop() // 유저 이름
name : string;

@Prop() // 유저 전화번호
mobile: string;

@Prop() // 유저 나이
age : number;

@Prop({ type: 'Array' }) // 유저 취미
hobby: string[];

@Prop({type : 'Object'}) // 유저 기타사항
etc : object
}

export const UserSchema = SchemaFactory.createForClass(Users);

코드1) MongoDB Collection Schema작성


// src/users/users.module.ts
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { UserSchema } from './schemas/user.schemas';

@Module({
imports:[MongooseModule.forFeature([{ name: 'Users', schema: UserSchema }]),],
controllers: [UsersController],
providers: [UsersService]
})
export class UsersModule {}

코드2) users.module.ts에 MongooseModule import


위 코드1,2를 작성하고 'npm run start:dev'를 하면 NestJS에서 MongoDB에 자동으로 Collection을 생성해 준다.


사진4) Users Collection 생성

위 사진4와 같이 'users' collection이 생성이 된다. 다음 글은 본격적으로 CRUD기능을 구현하도록 하겠다.


env 파일의 "MONGODB_CONNECTION" 예시는 아래와 같습니다.

MONGODB_CONNECTION=mongodb+srv://<mongodb 접속 허용 계정>:<비밀번호>@ddiegldks.9sdgnf.mongodb.net/<database 이름 지정하기, 없으면 test database으로 자동 생성>/chatting?retryWrites=true&w=majority&appName=chatting

mongodb.net 다음에 database를 지정하고 싶으면 이름을 작성하면 됩니다. 하지만 기본 default값으로 진행한다면 생략해도 무방합니다.


링크 : github url. lesson2 branch


다음글 : NestJS MongoDB 사용하기23- DB Create Read 


댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)