replace
이벤트
이 페이지의 내용
요약
replace
replace
이벤트 는replaceOne
메서드가 호출될 때와 같이 업데이트 작업이 컬렉션 에서 문서 를 제거하고 새 문서 로 대체할 때 발생합니다.
설명
필드 | 유형 | 설명 | |||
---|---|---|---|---|---|
| 문서 | 변경 스트림 이벤트의 식별자 역할을 하는 BSON 객체입니다. 이 값은 변경 스트림을 재개할 때
| |||
| 타임스탬프 |
oplog 크기 제한으로 인해다중 문서 트랜잭션은 여러 oplog 항목을 생성할 수 있습니다. 트랜잭션 에서 지정된 oplog 항목에 스테이징된 변경 스트림 이벤트는 동일한 동일한 단일 트랜잭션에 대한 이벤트를 식별하려면 변경 스트림 이벤트 문서에서 버전 8.0에서 변경되었습니다. | |||
| UUID | 변경이 발생한 컬렉션을 식별하는 UUID입니다. 버전 6.0에 추가. | |||
| 문서 | CRUD 작업으로 만들거나 수정한 문서의 샤딩된 컬렉션의 경우 이 필드에는 문서의 전체 샤드 키도 표시됩니다. | |||
| 문서 | 작업으로 생성된 새 문서입니다. 버전 6.0에서 변경되었습니다. MongoDB 6.0부터 | |||
| 문서 | 작업으로 변경 사항이 적용되기 전의 문서입니다. 즉, 문서 사전 이미지입니다. 이 필드는 버전 6.0에 추가. | |||
| 문서 | 트랜잭션과 연결된 세션의 식별자입니다. 작업이 다중 문서 트랜잭션의 일부인 경우에만 표시됩니다. | |||
| 문서 | 이벤트의 영향을 받는 네임스페이스(데이터베이스 및/또는 컬렉션)입니다. | |||
| 문자열 | 이벤트가 발생한 컬렉션의 이름입니다. | |||
| 문자열 | 이벤트가 발생한 데이터베이스의 이름입니다. | |||
| 문자열 | 변경 알림이 보고하는 작업 유형입니다. 이러한 변경 이벤트에 대해 | |||
| NumberLong | lsid 와 함께 트랜잭션을 고유하게 식별하는 데 도움이 되는 숫자입니다. 작업이 다중 문서 트랜잭션의 일부인 경우에만 표시됩니다. | |||
| 데이터베이스 작업의 서버 날짜 및 시간입니다. 버전 6.0에 추가. |
행동
이미지 사전 및 사후 문서화
MongoDB 6.0부터 다음 단계를 수행하면 문서가 변경(또는 삭제) 되기 전의 필드가 포함된 fullDocumentBeforeChange
문서가 표시됩니다.
db.createCollection()
,create
, 또는collMod
을(를) 사용하는 컬렉션에 대해 새changeStreamPreAndPostImages
필드를 활성화합니다.fullDocumentBeforeChange
을(를)"required"
또는db.collection.watch()
에서"whenAvailable"
(으)로 설정합니다.
변경 스트림 출력의 예시 fullDocumentBeforeChange
문서입니다.
"fullDocumentBeforeChange" : { "_id" : ObjectId("599af247bb69cd89961c986d"), "userName" : "alice123", "name" : "Alice Smith" }
변경 스트림s 출력에 대한 전체 예시는 전후 이미지를 포함하는 문서의 변경 스트림s를 참조하세요.
이미지가 다음과 같은 경우 변경 스트림 이벤트에 사전 및 사후 이미지를 사용할 수 없습니다.
문서 업데이트 또는 삭제 작업 시 collection에서 활성화되지 않았습니다.
expireAfterSeconds
에서 전후 이미지 보존 시간 설정 이후에 제거됩니다.다음 예시에서는 전체 클러스터에서
expireAfterSeconds
를100
초로 설정합니다.use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) 다음 예시에서는
expireAfterSeconds
등 현재changeStreamOptions
설정을 반환합니다.db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) expireAfterSeconds
를off
로 설정하면 기본 보존 정책이 사용되며, 해당 변경 스트림 이벤트가 oplog에서 제거될 때까지 사전 및 사후 이미지가 보존됩니다.변경 스트림 이벤트가 oplog에서 제거되면
expireAfterSeconds
사전 및 사후 이미지 보존 시간에 관계없이 해당 사전 및 사후 이미지도 삭제됩니다.
추가 고려 사항
전후 이미지를 활성화하면 저장 공간이 소모되고 처리 시간이 늘어납니다. 필요한 경우에만 전후 이미지를 활성화하세요.
변경 스트림 이벤트 크기를 16메가바이트 미만으로 제한합니다. 이벤트 크기를 제한하려면 다음을 수행하면 됩니다.
문서 크기를 8메가바이트로 제한합니다.
updateDescription
과 같은 다른 변경 스트림 이벤트 필드가 크지 않은 경우 변경 스트림 출력에서 사전 및 사후 이미지를 동시에 요청할 수 있습니다.updateDescription
과 같은 다른 변경 스트림 이벤트 필드가 크지 않은 경우 최대 16메가바이트 문서에 대해 변경 스트림 출력에서 사후 이미지만 요청합니다.다음과 같은 경우 최대 16메가바이트의 문서에 대해 변경 스트림 출력에서 사전 이미지만 요청합니다.
문서 업데이트가 문서 구조나 내용의 작은 부분에만 영향을 미칩니다. 그리고
replace
변경 이벤트를 발생시키지 않습니다.replace
이벤트에는 항상 후이미지가 포함됩니다.
사전 이미지를 요청하려면
db.collection.watch()
에서fullDocumentBeforeChange
를required
또는whenAvailable
로 설정합니다. 사후 이미지를 요청하려면 동일한 방법으로fullDocument
를 설정합니다.사전 이미지가
config.system.preimages
컬렉션에 기록됩니다.config.system.preimages
collection은 커질 수 있습니다. collection 크기를 제한하려면 앞서 표시된 대로 사전 이미지에 대해expireAfterSeconds
시간을 설정할 수 있습니다.사전 이미지는 백그라운드 프로세스가 비동기적으로 제거합니다.
중요
이전 버전과 호환되지 않는 기능
MongoDB 6.0부터는 변경 스트림에 문서 사전 및 사후 이미지를 사용하는 경우 이전 MongoDB 버전으로 다운그레이드하기 전에 collMod
명령을 사용하여 각 collection에 대해 changeStreamPreAndPostImages를 비활성화해야 합니다.
팁
다음도 참조하세요.
변경 스트림 이벤트 및 출력에 대해서는 변경 이벤트를 참조하세요.
컬렉션에서 변경 사항을 확인하려면
db.collection.watch()
를 참조하세요.변경 스트림s 출력에 대한 전체 예시는 전후 이미지를 포함하는 문서의 변경 스트림s를 참조하세요.
예시
다음 예시는 replace
이벤트에 대한 설명입니다.
{ "_id": { <Resume Token> }, "operationType": "replace", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("599af247bb69cd89961c986d") }, "fullDocument": { "_id": ObjectId("599af247bb69cd89961c986d"), "userName": "alice123", "name": "Alice" } }
replace
작업은 업데이트 명령을 사용하며 두 단계로 구성됩니다.
documentKey
을 사용하여 원본 문서를 삭제하고동일한 도구를 사용하여 새 문서를 삽입합니다.
documentKey
replace
이벤트의 fullDocument
은 대체 문서 삽입 후의 문서를 나타냅니다.