IT story

MongoDB에서 findAndModify와 업데이트의 차이점은 무엇입니까?

hot-time 2020. 5. 29. 23:43
반응형

MongoDB에서 findAndModify와 업데이트의 차이점은 무엇입니까?


findAndModifyMongoDB 메소드에 약간 혼란 스럽습니다 . update방법 보다 장점은 무엇입니까 ? 저에게는 항목을 먼저 반환 한 다음 업데이트하는 것 같습니다. 하지만 왜 먼저 반품해야합니까? 나는 MongoDB : 명확한 가이드를 읽었으며 큐를 조작하고 가져 오기 및 설정 스타일 원 자성이 필요한 다른 작업을 수행하는 데 편리하다고 말합니다. 그러나 이것이 어떻게 달성되는지 이해하지 못했습니다. 누군가 나에게 이것을 설명 할 수 있습니까?


항목을 가져 와서 업데이트하면이 두 단계 사이에 다른 스레드가 업데이트 될 수 있습니다. 항목을 먼저 업데이트 한 다음 가져 오면 중간에 다른 업데이트가있을 수 있으며 업데이트 한 항목과 다른 항목이 다시 표시됩니다.

"원자 적으로"수행한다는 것은 업데이트하고있는 것과 정확히 동일한 항목을 다시 얻는다는 것을 의미합니다.


findAndModify 문서를 반환하고 업데이트하지 않습니다.

Dwight Merriman (mongoDB의 원저자 중 하나)을 올바르게 이해했다면 update를 사용하여 단일 문서를 수정하면 ie ( "multi": false}도 원 자성입니다. 현재는을 사용하는 동등한 업데이트를 수행하는 것보다 빠릅니다 findAndModify.


로부터 MongoDB를 워드 프로세서 (강조는 추가) :

  • 기본적으로 두 작업 모두 단일 문서를 수정합니다. 그러나 multi 옵션이있는 update () 메소드는 여러 개의 document를 수정할 수 있습니다 .

  • findAndModify ()에 대해 여러 문서가 업데이트 기준과 일치하는 경우 업데이트 할 문서에 대한 제어 수단을 제공하기 위해 정렬지정할 수 있습니다 . update () 메서드의 기본 동작을 사용하면 여러 문서가 일치 할 때 업데이트 할 단일 문서를 지정할 수 없습니다.

  • 기본적으로 findAndModify () 메소드 사전 수정 된 문서 버전을 리턴합니다 . 업데이트 된 문서를 얻으려면 새 옵션을 사용하십시오. update () 메서드는 작업 상태가 포함 된 WriteResult 객체를 반환합니다. 업데이트 된 문서를 반환하려면 find () 메서드를 사용하십시오. 그러나 다른 업데이트로 인해 업데이트와 문서 검색간에 문서가 수정되었을 수 있습니다. 또한 업데이트가 단일 문서 만 수정했지만 여러 문서가 일치하는 경우 추가 논리를 사용하여 업데이트 된 문서를 식별해야합니다.

  • findAndModify ()에 쓰기 문제를 지정하여 기본 쓰기 문제를 무시할 수는 없지만 MongoDB 2.6부터는 update () 메소드에 쓰기 문제지정할 수 있습니다 .

단일 문서를 수정할 때 findAndModify () 및 update () 메소드는 문서를 원자 적으로 업데이트합니다.


유용한 사용 사례 중 하나는 카운터 및 유사한 사례입니다. 예를 들어,이 코드 (MongoDB 테스트 중 하나) 인 find_and_modify4.js를 살펴보십시오 .

따라서 findAndModify카운터를 늘리면 한 단계에서 증가 된 값을 얻습니다. 비교 : (A)이 작업을 두 단계로 수행하고 다른 사람 (B)가 단계 사이에서 동일한 작업을 수행하는 경우 A와 B는 서로 다른 두 가지 대신 동일한 마지막 카운터 값을 얻을 수 있습니다 (가능한 문제의 한 예).

참고 URL : https://stackoverflow.com/questions/10778493/whats-the-difference-between-findandmodify-and-update-in-mongodb

반응형