findAndModify

이 명령은 도큐먼트를 업데이트하고 업데이트된 도큐먼트를 반환한다. 그리고 이 연산은 원자적이고 한번에 수행된다.

그런데 이 명령과 update 명령의 차이는 무엇일까?

그래서 update를 사용하면 결국 갱신된 도큐먼트를 다시 find해야하지만, findAndModify는 이 둘을 하나의 동작으로 수행한다는 점이 다르다.

원자적 업데이트는 다른 업데이트 연산이 끼어들수 없는 업데이트다. 만약 update → find 순으로 수행하게 될 경우, 그 사이 동시에 다른 업데이트가 수행 될 경우, find의 결과가 달라지거나 심지어는 결과가 없을수도 있다(!)

findAndModify 연산이 실패하거나 반환할 것이 없다면 InventoryFetchFailure 예외가 발생한다. (만약 커넥션이나 네트워크 등의 이슈라면 OperationFailure 예외가 발생하기 때문에 구분이 가능하다)