NestJS MongoDB 사용하기4- DB Update Delete
안녕하세요. 알렉스입니다. 저번 포스팅에 이어 이번에는 MongoDB에 CRUD기능중 Update, Delete을 넣도록 하겠습니다. 처음 들어오셨다면 이전글을 참고해 주시기 바랍니다.
이전글 : NestJS MongoDB 사용하기3 - DB Create Read
// src/users/dto/update-user.dto.ts
import { ApiProperty, PartialType } from '@nestjs/swagger';
import { IsEmpty, IsString } from 'class-validator';
import { CreateUserDto } from './create-user.dto';
export class UpdateUserDto extends PartialType(CreateUserDto) {
@IsString()
@IsEmpty()
@ApiProperty({
readOnly: true,
})
id: string;
}
코드1) UpdateUserDto 작성
코드1에서 id를 다시 정의한 이유는 'extends PartialType'이 CreateUserDto이기 때문입니다. id는 필수값으로 넣어야 하는에 업데이트 할때는 파라메터로 넣기 때문에 필수가 아닙니다. 따라서 재 설정을 하여 id는 비어도 class-validator에서 걸리지 않도록 수정한 것입니다.
// src/users/users.service.ts
import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import mongoose from 'mongoose';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Users } from './schemas/user.schemas';
@Injectable()
export class UsersService {
constructor(
// // User모델을 UsersService Class에 넣어준다.
@InjectModel(Users.name)
private userModel: mongoose.Model<Users>,
) {}
// 유저 생성
async create(createUserDto: CreateUserDto) {
const createUser = await this.userModel.create(createUserDto);
return await createUser.save();
}
// skip, take을 이용하여 유저 나열하기 createdAt기존으로 DESC
async findAll(skip: number, take: number) {
const result = await this.userModel
.find({})
.sort({ createdAt: -1 }) // 최신날짜가 0번 인덱스로 올라오도록 설정
.skip(skip)
.limit(take);
return result;
}
// id를 이용하여 하나의 유저 찾기
async findOne(id: string) {
const result = await this.userModel.find({ id });
console.log('findOne : ', result);
return result[0] ? result[0] : false;
}
// id를 이용하여 하나의 document를 업데이트 하기
async update(id: string, updateUserDto: UpdateUserDto) {
// 해당 document가 존재하는지 확인하기
const findOneDocument = await this.findOne(id);
// 존재하지 않을시 if문 실행
if (!findOneDocument)
throw new NotFoundException('해당 document는 존재하지 않습니다.');
// 존재할시 업데이트 하고 return
return await this.userModel.updateOne(updateUserDto);
}
// id를 이용하여 하나의 document를 삭제
async remove(id: string) {
// 해당 document가 존재하는지 확인하기
const findOneDocument = await this.findOne(id);
// 존재하지 않을시 if문 실행
if (!findOneDocument)
throw new NotFoundException('해당 document는 존재하지 않습니다.');
// 존재할시 삭제 하고 return
return await this.userModel.deleteOne({ id });
}
}
코드2) update, remove 작성
해당 코드를 작성하고 NestJS을 실행하면 수정과 삭제가 정상적으로 되는것을 확인할수 있습니다.
GitLink lesson3 branch : NestJS_MongoDB_Mongoose
댓글
댓글 쓰기