Mongodb에서 쿼리한 Document의 프로퍼티가 delete 되지 않는 이유

onezerokang·2021년 6월 16일
0
post-thumbnail

오늘 겪었던 일을 다뤄보려고 한다. 상황을 간단하게 설명하자면, mongoose를 사용하여 User document를 query했다. 그리고 이를 client로 보내주어야 하는데, password나, jwt token 같이 전달할 필요 없는 값들까지 전달되는 것이 불편하여 delete 연산자를 사용했는데 제거되지 않았다. 코드로 보면 다음과 같다.

const user = await User.findOne({_id: req.params.id})
delete user.password;
delete user.tokens;

console.log(user) //password와 tokens가 사라지지 않는다.

구글링 한 결과 원인을 찾았다. 객체가 프로토타입에서 속성(property)를 상속하고 속성 자체가 없는 경우 객체에 있는 속성을 삭제할 수 없다. 즉 user document를 new User로 만들어 userSchema의 값을 상속시킨 것이기 때문에 delete되지 않는다는 것이었다.

그러면 어떻게 민감한 정보를 지울 수 있을까? 필자는 null을 활용했다.

const user = await User.findOne({_id: req.params.id})
user.password = null;
user.tokens = null;

console.log(user) //password와 tokens가 null로 대체되어 client에게 보내진다.

출처
https://stackoverflow.com/questions/33239464/javascript-delete-object-property-not-working

profile
블로그 이전 했습니다: https://techpedia.tistory.com

0개의 댓글