나는 mongodb를 사용하기 때문에 remove(구버전이라 이제 사용 X), deleteOne(), deleteMany() 등의 명령어를 사용해서 document를 삭제해야하는 데 삭제가 안됐다.

 

해결하고보니 두 가지의 문제점이 있었다.

 

 


 

 

문제점

 

1. 형식 (출처 : https://sehwan93.github.io/oracle/2021-06-20-mongodb2/)

 

db.{COLLECTION_NAME}.remove({query},{justOne}) 방식으로 작성해야한다.

 

내가 원래 시도했던 코드는 아래였다.

 

backend/routes/index.js

var User = require('./mongodbuser');  // DB 스키마 파일 참조

User.deleteOne();

 

왜 앞에 User라고 적었냐면 기존에 사용하던 DB 생성, find, findOne 전부 앞에 User.~라고 사용했고 잘 작동했기 때문이었다.

 

그러나 저 참고한 곳에서 명령어 형식을 보고 혹시..? 라는 생각에 아래와 같이 코드를 작성했고 에러가 생겼다. (원래는 에러도 안 생기고 삭제가 안 되기만 했음)

 

router.get('/secession', (req, res) => {
  User.find({name : req.cookies.session},(err, users) => { 
      if(!req.cookies.session || err) {  // 정보/쿠키 없거나 에러 났을 때
        res.redirect('/');
      } else {
        users.deleteOne();
        res.clearCookie('session');
        res.redirect('/'); 
      }
  })
})

 

이렇게 작성했을 때 발생한 에러는 deleteOne is not a function

 

 

2. find 사용

 

에러가 생겼을 때 구글링을 했고 deleteOne이 remove보다 최신 버전인 걸 알고 있는 상태였는데 deleteAndfindeOne ? 인가 이런 함수가 최신 버전이니 이 명령어를 쓰라고 스택에 적혀있었고 해봤으나 역시나 똑같은 오류가 생겼다.

 

알고보니 버전의 문제가 아니었고 find가 아니라 findOne을 쓰니 정상동작했다.

 

 

<성공한 코드>

router.get('/secession', (req, res) => {
  User.findOne({name : req.cookies.session},(err, users) => { 
      if(!req.cookies.session || err) {  // 정보/쿠키 없거나 에러 났을 때
        res.redirect('/');
      } else {
        users.deleteOne();
        res.clearCookie('session');
        res.redirect('/'); 
      }
  })
})

 

 

 


 

 

드디어 탈퇴 기능이 구현됐다.