MongoDB에서 findAndModify와 업데이트의 차이점은 무엇입니까?
findAndModify
MongoDB mong mong 。이 제품의 장점은 무엇입니까?update
방법?저는 일단 반품을 하고 나서 업데이트를 하는 것 같습니다.그런데 왜 먼저 반품해야 하죠?MongoDB: 최종 가이드를 읽었는데, 큐를 조작하거나 get-and-set 스타일의 원자성을 필요로 하는 다른 작업을 수행하는 데 편리하다고 합니다.하지만 나는 그것이 어떻게 이것을 달성하는지 이해하지 못했다.누가 나한테 설명 좀 해줄래?
항목을 가져온 후 업데이트하면 두 단계 사이에 다른 스레드에 의한 업데이트가 있을 수 있습니다.항목을 먼저 업데이트한 후 가져오면 중간에 다른 업데이트가 있을 수 있으며 업데이트한 항목과 다른 항목이 반환됩니다.
"원자적으로" 이 작업을 수행한다는 것은 업데이트 중인 항목과 동일한 항목이 반환된다는 것을 의미합니다. 즉, 그 사이에 다른 작업이 수행될 수 없습니다.
findAndModify
문서는 반환되지만 업데이트는 반환되지 않습니다.
Dwight Merriman ( mongoDB )한 업데이트를 findAndModify
MongoDB 문서에서 (강조 추가):
기본적으로 두 작업 모두 단일 문서를 수정합니다.단, multi 옵션을 가진 update() 메서드는 여러 문서를 수정할 수 있습니다.
여러 문서가 업데이트 기준과 일치하는 경우 findAndModify()에 대해 정렬을 지정하여 업데이트할 문서를 제어할 수 있습니다.update() 메서드의 기본 동작에서는 여러 문서가 일치할 때 업데이트할 단일 문서를 지정할 수 없습니다.
기본적으로는 findAndModify() 메서드는 문서의 사전 수정 버전을 반환합니다.업데이트된 문서를 가져오려면 새 옵션을 사용하십시오.update() 메서드는 작업 상태를 포함하는 WriteResult 개체를 반환합니다.업데이트된 문서를 반환하려면 find() 메서드를 사용합니다.그러나 다른 업데이트로 인해 업데이트와 문서 검색 사이에 문서가 수정되었을 수 있습니다.또한 업데이트가 하나의 문서만 수정했지만 여러 문서가 일치하는 경우, 업데이트된 문서를 식별하기 위해 추가 논리를 사용해야 합니다.
MongoDB 3.2 이전에는 기본 쓰기 문제를 덮어쓰기 위해 findAndModify()에 쓰기 문제를 지정할 수 없지만 MongoDB 2.6 이후 update() 메서드에 쓰기 문제를 지정할 수 있습니다.
단일 문서를 수정할 경우 findAndModify()와 update() 메서드가 모두 문서를 자동으로 업데이트합니다.
유용한 사용 사례의 한 클래스는 카운터 및 유사한 사례입니다.예를 들어 이 코드(MongoDB 테스트의 1개)를 확인합니다.find_and_modify4.js
해서 '이렇게'를 붙이면findAndModify
카운터를 증가시키고 카운터의 증가치를 한 번에 얻을 수 있습니다.비교: (A)가 이 조작을 2단계에서 실행하고 다른 (B)가 스텝 사이에 같은 조작을 실시하면, A와 B가 다른 2단계(가능한 문제의 예만)가 아닌 같은 마지막 카운터 값을 얻을 수 있습니다.
이것은 오래된 질문이지만, 중요한 질문이며, 다른 답변은 다음과 같은 것을 깨닫기 전까지 더 많은 질문으로 이어졌습니다.두 가지 방법은 매우 유사하며 대부분의 경우 둘 중 하나를 사용할 수 있습니다.
- 다.
findAndModify
★★★★★★★★★★★★★★★★★」update
등 내에서 '1'은 '1'은 '1'입니다.★★★★★★★★★★★★★★★★★★,<query>
★★★★★★★★★★★★★★★★★」<update>
는 거의 합니다. - 둘 다 서버가 쿼리와 일치하는 문서에서 직접 원자적인 변경이 발생합니다. 즉, 서버가 쿼리가 유효함을 확인하고 업데이트를 적용하는 밀리초 동안 문서에 대한 내부 쓰기 잠금이 설정됩니다.
사용자가 취득할 수 있는 시스템 수준의 쓰기 잠금 또는 세마포어는 없습니다.완전 정지.MongoDB는 의도적으로 문서를 체크아웃하고 변경 후 다시 쓰는 것을 쉽게 하지 않으며, 그 사이에 다른 사람이 문서를 변경하는 것을 막습니다.(개발자가 원하는 것으로 생각할 수도 있지만, scalability와 동시성 측면에서는 안티패턴이 되는 경우가 많습니다.단순히 예를 들어 클라이언트가 쓰기 잠금을 취득한 후 보관 중 사망하는 경우를 생각해 보십시오.쓰기 잠금을 정말로 원할 경우 문서에서 잠금을 만들고 원자 변경 사항을 사용하여 비교 및 설정한 다음 버려진 잠금 등을 처리하는 자체 복구 프로세스를 결정할 수 있습니다.하지만 저쪽으로 갈 때는 조심하세요.)
제가 알기로는 두 가지 방법이 크게 다릅니다.
- 업데이트 시 문서의 복사본을 원하는 경우: 이것만 허용, 원본(기본값) 반환 또는
new
갱신 후 기록(기재한 바와 같이,update
취득할 수 있는 것은WriteResult
(문서를 참조하지 않고, 물론 문서를 읽기 직전이나 후에 읽는 것은 다른 프로세스로부터 보호되지 않으며, 읽기와 업데이트 사이에 레코드가 변경되는 것도 마찬가지입니다. - 일치하는 문서가 여러 개 있을 경우:
findAndModify
1개만 변경할 수 있습니다.또, 이 경우,sort
어떤 것을 변경해야 하는지를 나타낸다.update
와 함께 모든 것을 바꿀 수 있다multi
디폴트로는 1개뿐이지만, 어느 것이 어떤 것인지 말할 수 없습니다.
따라서 HungryCoder가 말하는 것이 더 효율적입니다(예: 문서를 읽을 필요가 없거나 여러 레코드를 변경하는 경우).그러나 많은 원자 업데이트에 대해 문서를 원하고 있습니다.findAndModify
꼭 필요합니다.
카운터 조작(inc 또는 dec)에 findAndModify()를 사용하고, 그 외의 단일 필드에서는 대소문자가 변환됩니다.애플리케이션을 Couchbase에서 MongoDB로 이행하면서 이 API를 발견했습니다.이 API는 GetAndlock()을 실행하는 코드를 대체하고 콘텐츠를 로컬로 수정하며 replace()를 저장하여 Get()를 다시 실행하여 업데이트된 문서를 가져옵니다.mongoDB에서는 업데이트된 문서를 반환하는 단일 API를 사용했을 뿐입니다.
언급URL : https://stackoverflow.com/questions/10778493/whats-the-difference-between-findandmodify-and-update-in-mongodb
'programing' 카테고리의 다른 글
Wordpress 내부에서 Larabel에서 인증된 사용자를 확인하시겠습니까? (0) | 2023.03.20 |
---|---|
AngularJs 서비스에서 사용자 지정 이벤트를 생성하는 방법 (0) | 2023.03.20 |
호버에 다른 스타일 구성 요소 대상 지정 (0) | 2023.03.20 |
[ Advanced Custom Fields ](상세 커스텀필드)에는 마지막 3개의 하위 반복행 표시 (0) | 2023.03.20 |
"string"을 "time zone 없는 타임 스탬프"로 변환하는 방법 (0) | 2023.03.20 |