[MongoDB] Mongoose - 업데이트 하기

Zero·2023년 3월 14일
0

MongoDB

목록 보기
9/14

Mongoose, MongoDB 의 update

Mongoose와 MongoDB의 update 쿼리는 동작하는 방식이 다르다. MongoDB는 업데이트 할 내용을 그대로 replace 해버리는 반면에, Mongoose는 merge 하는 것처럼 동작한다. Mongoose가 왜 원본의 방식을 따르지 않고 다른 방식으로 동작할까?

기본적으로 mongoose는 입력받는 데이터에 $set 연산자가 없으면 자기가 알아서 붙여준다는 것인데, 우리가 실수로 문서를 통째로 덮어씌워버리는 것을 막아주겠다 라고 설명서에 적어놓았다.

그러나 MongoDB는 원본 데이터를 바로 홀라당 바꿔버린다. 이런 이유로 MongoDB에서 update 쿼리로 기존 문서를 변경하고 싶을 때 $set 연산자를 이용해야 하는 것이다.



findOneAndUpdate()

Model.findByIdAndUpdate(id, { name : 'zerozae' } ).exec();

id에 해당하는 document를 찾아서 name을 수정해주게 된다.



Update

Model.update({name:'zerozae' }, {age : 24}).then(res=>console.log(res));
  • name이 zerozae인 document를 찾아서 age를 24으로 수정하겠다.


참고 💡

exec

그냥 query문만 호출하면, 실제적으로 쿼리가 실행되는 것이 아니다.
콜백 함수의 유무에 따라 실행이 달라지게 된다. 콜백 함수가 있으면 실행 되고, 콜백 함수가 없으면 쿼리를 리턴하게 된다. 즉 결론은 exec()를 붙이든 안붙이든 기능 자체는 동일하지만 유사 프로미스가 아닌 온전한 프로미스를 반환값으로 얻고 싶다면 exec()를 사용하는 것을 권장한다.

0개의 댓글