[MongoDB] RUD 구현

적자생존·2023년 1월 8일
0

Node

목록 보기
13/17

1. Read api 구현

가. id를 이용해서 데이터 찾기

MongoDB에서는 데이터를 생성할 때 id가 자동으로 나온다.

이 아이디를 이용해서 read를 구현하려면 findById라는 메서드를 이용한다.

{
	title : "테스트 제목입니다.",
  	description : "테스트 내용입니다.",
    creator : "u1"
}

이라는 데이터가 있고 이에 따른 스키마가 정의되어 있다고 가정한다.

이때 몽고디비에 저장하면

{
  	_id : "sglsnlkorink1n3l"
	title : "테스트 제목입니다.",
  	description : "테스트 내용입니다.",
    creator : "u1"
}

위에 처럼 _id가 자동으로 난수로 생성이 된다.

이 id를 이용해서 데이터를 찾을 것이며 에러처리는 생략한다.

const TestData = require("스키마정의경로")


const getDataById = async(req, res, next) => {
	const testId = req.params.id
    
    let foundData
    try{
    foundData = await TestData.findById(testId)
    } catch(err) {
     	에러 불러오는 함수 
    }
  res.json({foundData : foundData.toObject({getters: true})})
}

위와 같다.

코드를 보면 testId로 파라미터에서 아이디를 추출해내고

foundData라는 변수를 만들고 스키마인 TestData와 동일한 스키마를 가진 내용을 db에서 가져와 placeID와 일치하는 아이디를 가진 데이터를 불러온다.

이때 응답값에서 toObject메서드는 몽고디비에서 생성되는 아이디를 자바스크립트에서 해석할 수 없기 때문에 붙혀주고 안에 있는 getters:true는 _id가 보기 싫으니까 그냥 id로 만들어주기 위해 넣어 준 것이다.

나.creator로 데이터 찾기

조건은 가와 동일하며 데이터 내부의 creator를 이용해서 데이터를 검색해 볼 것이다.

const getDataByCreatorID = async(req, res, next) => {
	const testId = req.params.id
    let foundData
    try{
    	foundData= await TestData.find({creator: testId})
    } catch(err){
    	에러 불러오는 함수
    }
  res.json({foundData: foundData.map((data) => data.toObject({getters:true})})
}

가의 과정과 비슷한데 이 때는 find라는 메서드를 이용해서 찾아야 한다.

find 메서드는 스키마와 동일한 데이터를 find 내부의 파라미터를 이용해서 일치하는 데이터만 뽑아서 출력한다.

이때 응답값에 map을 이용하는 이유는 일치하는 데이터는 배열형태로 나오고 그 안에 _idid로 만들기 위해서 사용하는 것이다.

2. update api 만들기

const update = (req, res, next) => {
 const {title} = req.body;
 const findId = req.params.pid
 const updatedData = {...DUMMY_DATA.find((p) => p.id === findId))}
 const index = DUMMY_DATA.findIndex((p) => p.id === findId))
 updatedData.title = title
  
  DUMMY_DATA[index] = updatedData
  res.status(200).json({data : updatedData})
}

전에 작성한 함수를 재활용 할 것이다.

업데이트도 동일하게 id를 이용해서 업데이트 할 데이터 찾기 => 글작성(업데이트) => 저장이다

즉 find와 create를 합친것과 동일하다.

const update = async (req, res, next) => {
 const {title} = req.body;
 const findId = req.params.pid
 
 let foundData
 try{
 	foundData = await TestData.findById(findId)
 } catch(err){에러 함수}
 
 foundData.title = title
  
 try{
 	await foundData.save()
 } catch(err){에러 함수}
  
  res.status(200).json({foundData: foundData.toObject({getters:true})})
}

마치 read와 create합친 것과 비슷하다

findById를 이용해서 데이터를 찾고 그 데이터를 save함수를 이용해서 덮어 씌워준다.

3. delete api 만들기

delete 역시 동일하다

데이터를 찾고 => remove메서드를 이용해서 지워주면 된다.

const delete = (req, res, next) => {
 const findId = req.params.pid 
 DUMMY_DATA = DUMMY_DATA.filter((p) => p.id !== findId)
 res.status(200).json({message : "삭제완료"})
}

이미 만들어진 코드를 수정해 보겠다.

const delete = async (req, res, next) => {
 const findId = req.params.pid 
 let foundData
 try{
 	foundData = await TestData.findById(findId)
 }catch(err){에러 함수}
  
 try{
 	await foundData.remove()
 } catch(err){에러 함수}
  
 res.status(200).json({message : "삭제완료"})
}
profile
적는 자만이 생존한다.

0개의 댓글