programing

업데이트 대 교체의 Mongod 의미

minimums 2023. 6. 22. 21:39
반응형

업데이트 대 교체의 Mongod 의미

는 이 관련 질문을 읽었지만, 아래 질문은 다릅니다.mongodbc# 드라이버에 다음이 있습니다.ReplaceOne필터 인수에 맞는 문서의 전체 내용을 대체하는 데 사용할 수 있는 문서 수집 클래스의 메서드(및 비동기식)입니다.은 대은다사것는다입니용하을음안▁the다것입니▁the▁to▁use▁isative를 사용하는 것입니다.UpdateOne또는UpdateMany방법(또는 비동기 대응물), 이것은 a의 구축을 요구합니다.UpdateDefinition<TDocument>.

제 질문은 동일한 결과를 얻기 위해 선택할 수 있는 충분한 입력 데이터가 있는 경우 다른 방법(교체 대 업데이트)보다 이러한 방법 중 하나를 선택하는 것과 관련이 있습니다.즉, 원본 문서 전체를 가지고 있고 내용의 작은 조각만 업데이트하고 싶은 경우입니다.

제가 생각할 수 있는 첫 번째 요소는 데이터베이스 서버로 전송되는 페이로드입니다.mongodbc# 드라이버 소스를 읽지 않았고 이를 확인할 수 있는 문서를 찾지 못했지만, 다음과 같습니다.ReplaceOne업데이트 작업과 함께 특히 더 큰 문서의 경우 더 많은 바이트를 전송해야 할 수 있습니다.Update...메소드는 수정이 필요한 문서 조각에 대한 업데이트 메타데이터만 전송하면 더 작은 페이로드를 처리할 수 있는 것처럼 보입니다(필터 기준 외에도 두 메소드 모두 전송해야 함).누가 이것이 정확한 가정인지 확인할 수 있습니까?

동료가 제기한 또 다른 요인은 방법(업데이트 또는 교체)의 선택이 문서 인덱싱에도 영향을 미칠 수 있다는 점입니다.하는 것은 것서가정은다같습다니음을 사용하는 입니다.ReplaceOne데이터베이스가 업데이트 중인 문서에 대한 모든 인덱스를 재작성하도록 할 수 있는 가능성이 있는 반면,Update...메서드에는 업데이트 정의의 메타데이터에 속하지 않는 필드에 인덱스를 다시 작성하지 않을 만큼 충분한 변경 메타데이터 정보가 있습니다.update를 할 수 있는 ? mongodb replace는 업데이트를 사용하여 문서 색인 작성을 수정합니다.

은 이미몇, 이에 대해서요.AddToSet그리고.PullFilter에 있는 .Update<TDefinition>수업. 아무래도.Update...배열과 을할 수 . 은 개별적으로하여 문서에 전송해야 합니다. 이러한 작업은 2개의 별도 호출을 사용하여 개별적으로 전송되어야 합니다.Update... separate 별의법방도Update<TDefinition>인스턴스(필터 인수가 동일하지만).ReplaceOne이 경우, 적어도 C# 드라이버를 사용할 때, 메소드는 단일 "거래"에서 이러한 종류의 문서를 변경할 수 있는 유일한 방법인 것 같습니다.현재사중입니다용다중니입▁using▁currently를 사용하고 .Update...1파운드가 ReplaceOne현재로서는 대안이 위에서 언급한 것처럼 색인화에 부정적인 영향을 미칠지 불확실하기 때문입니다.

이것들 외에, 어떤 추가적인 의미들이 사람들로 하여금 선택하게 할 수 있습니다.ReplaceOne에 대한 메소드 제품군Update...가족인가요, 아니면 그 반대인가요?이는 두 가지 접근 방식 중 하나로 동일한 결과를 얻을 수 있는 충분한 입력 데이터(즉, 모든 문서 데이터)가 있다고 가정하고, 교체를 통해 상태를 직접 변경하는 것을 개의치 않으며, 업데이트를 통해 mongo 정의를 구축하는 것을 개의치 않습니다.

mongo 데이터가 구조화되지 않기 때문에 replaceOne 대 Update의 주요 장점은 모든 필드가 삭제되고 새 문서로 교체되므로 쿼리가 더 간단하다는 것입니다.

사실입니다. 하지만 문제가 가장 적은 경우 검색 기준은 둘 다 동일하지만 대체하나는 전체 문서를 쿼리로 전달해야 합니다. 새로운 문서를 완전히 가지고 있고 그런 식으로 종료하기를 원할 때 여전히 가치가 있습니다.

replace on replace -> yes, replaceOne 기존 문서를 업데이트하는 대신 전체 문서를 교체합니다. 인덱스에 있는 요소를 업데이트하는 경우 인덱스는 변경 사항에 맞게 재조정해야 하지만 replace와 함께 항상 재조정해야 합니다._id 인덱스는 두 작업 모두에 영향을 받지 않습니다(제 생각에는).

원하는 값이 이미 있는 경우, 단일 필드를 변경하기 위해 전체 문서를 바꿀 필요가 없으므로 모든 필드에서 인덱스를 다시 작성하려면 $set 작업을 사용해야 합니다. $set 작업은 전체 문서 대신 단일 필드에 대해 ReplaceOne으로 간주할 수 있습니다.

https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/index.html https://docs.mongodb.com/manual/reference/operator/update/set/

REST 서비스에 통합된 경우 replaceOne 메서드는 PUT 작업과 잘 일치할 것입니다. PUT 작업에서는 개체 식별자와 함께 요청 본문의 전체 개체를 전송하고 전체 개체를 데이터베이스에 유지할 수 있습니다.PUT 작업의 구별되는 특징은 동일하다는 것입니다(반복적으로 실행할 수 있음). replaceOne를 보다upsert기본값은 false이지만 true로 설정된 경우(검색 기준이 고유하게 인덱싱된 필드에 있음) 문서가 독립적으로 제거되었는지 여부에 관계없이 작업을 반복할 수 있습니다.

업데이트 작업은 문서의 일부를 전체적으로 바꾸기보다는 업데이트하기 때문에 POST 작업과 더 유사합니다.또한 시간이 걸립니다.upsert그러나 다른 프로세스에 의해 문서가 제거된 경우 결과 문서의 형식이 잘못되어 업데이트가 실패할 수 있습니다.

언급URL : https://stackoverflow.com/questions/46061753/mongodb-implications-of-update-versus-replace

반응형