update
이벤트
요약
설명
필드 | 유형 | 설명 | |||
---|---|---|---|---|---|
| 문서 | 변경 스트림 이벤트의 식별자 역할을 하는 BSON 객체입니다. 이 값은 변경 스트림을 재개할 때
| |||
| 타임스탬프 |
oplog 크기 제한으로 인해다중 문서 트랜잭션은 여러 oplog 항목을 생성할 수 있습니다. 트랜잭션 에서 지정된 oplog 항목에 스테이징된 변경 스트림 이벤트는 동일한 동일한 단일 트랜잭션에 대한 이벤트를 식별하려면 변경 스트림 이벤트 문서에서 버전 8.0에서 변경되었습니다. | |||
| UUID | 변경이 발생한 컬렉션을 식별하는 UUID입니다. 버전 6.0에 추가. | |||
| 문서 | CRUD 작업으로 만들거나 수정한 문서의 샤딩된 컬렉션의 경우 이 필드에는 문서의 전체 샤드 키도 표시됩니다. | |||
| 문서 | CRUD 작업에 의해 생성되거나 수정된 문서입니다. 이 필드 는 을(를)(으)로 설정하다 하여 변경 스트림 을 구성한 경우에만 자세한 내용은 업데이트 작업을 위한 전체 문서 조회를 참조하세요. 버전 6.0에서 변경되었습니다. MongoDB 6.0부터 | |||
| 문서 | 작업으로 변경 사항이 적용되기 전의 문서입니다. 즉, 문서 사전 이미지입니다. 이 필드는 버전 6.0에 추가. | |||
| 문서 | 트랜잭션과 연결된 세션의 식별자입니다. 작업이 다중 문서 트랜잭션의 일부인 경우에만 표시됩니다. | |||
| 문서 | 이벤트의 영향을 받는 네임스페이스(데이터베이스 및/또는 컬렉션)입니다. | |||
| 문자열 | 이벤트가 발생한 컬렉션의 이름입니다. | |||
| 문자열 | 이벤트가 발생한 데이터베이스의 이름입니다. | |||
| 문자열 | 변경 알림이 보고하는 작업 유형입니다. 이러한 변경 이벤트에 대해 | |||
| 문서 | 업데이트 작업으로 업데이트되거나 제거된 필드를 설명하는 문서입니다. | |||
updateDescription. disambiguatedPaths | 문서 |
확장된 이벤트 표시 옵션을 버전 6.1에 추가. | |||
updateDescription. removedFields | 배열 | 업데이트 작업으로 제거된 필드의 배열입니다. | |||
updateDescription. truncatedArrays | 배열 | 다음 단계 중 하나 이상을 사용하여 파이프라인 기반 업데이트로 수행한 배열 잘림을 기록하는 문서 배열입니다. 전체 배열 이 교체되면 잘린 내용이 updateDescription.updatedFields 아래에 보고됩니다. | |||
updateDescription. truncatedArrays. field | 문자열 | 잘린 필드의 이름입니다. | |||
updateDescription. truncatedArrays. newSize | integer | 잘린 배열 내 요소의 수입니다. | |||
updateDescription. updatedFields | 문서 | 업데이트 작업으로 수정된 필드에 해당하는 키가 있는 문서입니다. 각 필드의 값은 새 값을 생성한 작업이 아니라 해당 필드의 새 값에 해당합니다. | |||
| 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를 참조하세요.
경로 혼동
버전 6.1에 추가.
updateDescription
필드는 작업으로 인해 문서의 특정 필드에 변경된 내용을 기록합니다. 이러한 필드 설명자는 점(.
)을 경로 구분자로 사용하고 숫자를 배열 인덱스로 사용하므로 점이나 숫자를 사용하는 필드 이름이 포함된 경우 모호성이 발생합니다.
update
이벤트가 모호한 disambiguatedPaths
필드와 관련된 변경 사항을 보고하면 문서에서 경로 키에 각 경로 구성 요소를 나열하는 배열을 제공합니다.
참고
disambiguatedPaths
필드는 showExpandedEvents 옵션으로 시작된 변경 스트림에서만 사용할 수 있습니다.
예를 들어, 사람과 그들이 살고 있는 마을을 나열하는 문서를 고려해 보겠습니다.
{ "name": "Anthony Trollope", "home.town": "Oxford", "residences": [ {"0": "Oxford"}, {"1": "Sunbury"} ] }
업데이트에서
home.town
필드를Oxford
에서London
(으)로 수정하면 다음과 같은 업데이트 설명이 생성됩니다."updateDescription": { "updatedFields": { "home.town": "London" }, "disambiguatedPaths": { "home.town": [ "home.town" ] } } home.town
필드에 마침표가 포함되어 있으므로disambiguatedPaths
필드에는 하나의 값이 있는 배열이 표시되어town
(이)가home
의 하위 필드가 아님을 나타냅니다.업데이트가 동일한 변경을 위해
residences
배열의 값을 수정하면 다음과 같은 업데이트 설명이 생성됩니다."updateDescription": { "updatedFields": { "residences.0.0": "London" }, "disambiguatedPaths": { "residences.0.0": [ "residences", 0, "0" ] } } 명확해진 경로에는 배열 인덱스를 나타내는 정수
0
및 중첩된 문서 내의 필드 이름을 나타내는 문자열"0"
(이)가 포함됩니다.
disambiguatedPath
에 숫자 필드가 포함되지 않는 두 가지 경우가 있습니다.
경로의 첫 번째 필드가 숫자 문자열인 경우(즉,
0.name
). 첫 번째 필드는 배열 인덱스가 될 수 없으므로 이는 모호하지 않습니다.숫자 문자열 필드에 선행 0이 있는 경우(예:
0001
). 정수는 앞에 0을 가질 수 없으므로 이는 모호하지 않습니다.
예시
다음 예시는 update
이벤트에 대한 설명입니다.
{ "_id": { <Resume Token> }, "operationType": "update", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("58a4eb4a30c75625e00d2820") }, "updateDescription": { "updatedFields": { "email": "alice@10gen.com" }, "removedFields": ["phoneNumber"], "truncatedArrays": [ { "field" : "vacation_time", "newSize" : 36 } ] } }
다음 예시에서는 fullDocument : updateLookup
옵션으로 열린 변경 스트림에 대한 update
이벤트를 보여 줍니다.
{ "_id": { <Resume Token> }, "operationType": "update", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("58a4eb4a30c75625e00d2820") }, "updateDescription": { "updatedFields": { "email": "alice@10gen.com" }, "removedFields": ["phoneNumber"], "truncatedArrays": [ { "field" : "vacation_time", "newSize" : 36 } ], "disambiguatedPaths": { } }, "fullDocument": { "_id": ObjectId("58a4eb4a30c75625e00d2820"), "name": "Alice", "userName": "alice123", "email": "alice@10gen.com", "team": "replication" } }
fullDocument
문서는 업데이트된 문서의 최신 다수 커밋 버전을 나타냅니다. fullDocument
문서는 업데이트 작업과 문서 조회 사이에 발생한 과반수 커밋 작업의 인터리빙 수에 따라 업데이트 작업 당시의 문서와 다를 수 있습니다.