본문 바로가기
Database

MongoDB - MongoTemplate UPDATE METHOD

by devLog by Ronnie's 2022. 2. 5.

들어가며


이번 개발 도중 일부 테이블들은 MongoDB로 되어 있어 해당 테이블 관련하여 수정 API를 만들던 도중 알게된 내용을 정리한다.

 

MongoTemplate update


먼저 문제의 발단은 update 코드를 짜던 도중 updateFirst 메서드를 쓰는 과정에서 나왔다.

아래의 코드를 보면 먼저 특정 아이디로 업데이트를 할 대상을 지정하는 것이기 때문에 updateFirst를 쓰든 아니면 updateMulti를 쓰든 동작에는 이상이 없지만 개념적으로 updateFirst는 여러 대상이 나왔을 때 첫번째 대상만 업데이트를 하는 것인데 id(pk)로 대상을 찾은 후 업데이트를 하는 것이기 때문에 여러 대상이 나오지 않아 동작에는 문제가 없지만 개념적으로는 의미가 안맞을 수 있다.

 

 

MongoTemplate UPDATE METHOD


스프링 docs에서 update 관련 메서드를 확인해보면 아래와 같이 updateFirst / updateMulti / upsert 이렇게 총 3가지를 확인할 수 있다. updateFirst는 일치하는 첫번째 개체를 업데이트하는 것이고, updateMulti는 일치하는 모든 개체를 업데이트하는 것이고 upsert는 일치하는 것이 있다면 그것을 업데이트하고 없다면 생성을 하는 것이다.

그러던 중 아래 해당 doUpdate라는 메서드를 발견해서 사용을 해보려 했다.

하지만 인텔리제이에서 해당 메서드가 나오지 않았다.

정확한 확인을 위해 mongoTemplate를 들어가 확인해 보니 아래와 같이 updateFirst와 updateMulti, upsert의 구현부에서 doUpdate가 실행되며 파라미터 값의 boolean 값을 통해서 updateFirst / updateMulti / upsert 3가지중 한가지를 실행하도록 하였다.

 

마치며


결론적으로 mongoTemplate의 update를 할때 id 값으로 이미 하나의 개체만 지정해서 업데이트를 하는 경우에는 3가지 메서드 중 어느 메서드를 쓰더라도 update가 정상적으로 실행되며 이러한 상황이 아닌 다른 상황에서는 각 상황에 맞게 3가지 메서드 중 하나를 선택해서 사용하면 된다.

 

 

 

 

 

 

 

 

 

 

'Database' 카테고리의 다른 글

MySql - Datetime 과 Timestamp 차이점 및 날짜형 데이터 타입 정리  (0) 2022.04.22
DataGrip - 테이블 정보 한눈에 확인하는 방법  (0) 2022.02.21
MongoDB 관련 정리  (0) 2022.01.26
DSL 정의  (0) 2021.10.20
SQL - JOIN  (0) 2021.05.23

댓글