JuBin's personal study blog

[MongoDB] findAndModify, update 차이점 본문

DataBase/MongoDB

[MongoDB] findAndModify, update 차이점

JuBin 2023. 4. 28. 19:28
반응형
findAndModify와 update 연산자는 모두 MongoDB에서 도큐먼트를 수정하는 데 사용됩니다. 두 연산자는 목적과 사용법이 약간 다릅니다.

 

 

findAndModify

쿼리 조건에 따라 단일 문서를 수정하고 반환합니다. 이 연산자는 주어진 쿼리 조건에 따라 일치하는 도큐먼트를를 검색하고, 해당 도큐먼트를 수정한 후에 수정된 도큐먼트를 반환합니다. 이 연산자는 일반적으로 단일 도큐먼트를 업데이트할 때 사용됩니다. 또한 update 된 도큐먼트를 반환합니다.

또한 DB Lock 관점에서 볼때 write 락을 사용하여 검색된 도큐먼트를 수정합니다. 이때, write 락은 해당 도큐먼트를 수정할 수 있는 권한을 가진 단일 스레드에게만 부여됩니다. 따라서, findAndModify 연산자는 도큐먼트 단위로 락을 취하며, 다른 스레드가 동시에 같은 도큐먼트를 수정하는 것을 방지합니다.

 

update

반면에 update 연산자는 쿼리 조건에 따라 여러 도큐먼트를 수정할 수 있습니다.

이 연산자는 주어진 쿼리 조건에 따라 일치하는 모든 도큐먼트를 검색하고, 해당 문서를 수정합니다. 이 연산자는 문서를 일괄 업데이트할 때 유용합니다. update 연산자는 반환된 결과에서 수정된 도큐먼트의 상태를 반환하지 않습니다.

또한 DB Lock관점에서 볼때 write 락을 사용하여 해당 컬렉션 전체를 락합니다. 따라서, update 연산자는 컬렉션 단위로 락을 취하며, 다른 스레드가 동시에 같은 컬렉션에 접근하여 수정하는 것을 방지합니다.

그러나 락을 전체 컬렉션에 걸기 때문에, 컬렉션의 크기가 큰 경우에는 다른 스레드가 접근하는 동안 대기할 수밖에 없어서 성능 이슈가 발생할 수 있습니다.

 

반응형