Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

update 이벤트

이 페이지의 내용

  • 요약
  • 설명
  • 행동
  • 이미지 사전 및 사후 문서화
  • 예시
update

작업이 컬렉션의 문서를 업데이트하면 update 이벤트가 발생합니다.

참고

명확화

컬렉션 옵션이 수정될 때 발생하는 이벤트에 학습 보려면 modify 이벤트 를 참조하세요.

필드
유형
설명
_id
문서

변경 스트림 이벤트의 식별자 역할을 하는 BSON 객체입니다. 이 값은 변경 스트림을 재개할 때 resumeAfter 매개변수의 resumeToken(으)로 사용됩니다. _id 객체의 형식은 다음과 같습니다.

{
"_data" : <BinData|hex string>
}

_data 유형은 MongoDB 버전 및 경우에 따라 변경 스트림 열기 또는 재개 시점의 기능 호환성 버전(FCV) 에 따라 달라집니다. _data 유형의 전체 목록은 재개 토큰 을 참조하세요.

resumeToken 기준으로 변경 스트림을 재개하는 예시는 변경 스트림 재개를 참조하세요.

clusterTime
타임스탬프

이벤트와 연결된 oplog 항목의 타임스탬프입니다.

다중 문서 트랜잭션과 연결된 변경 스트림 이벤트 알림은 모두 동일한 clusterTime 값(트랜잭션이 커밋된 시간)을 가집니다.

샤딩된 클러스터에서는 동일한 clusterTime 이벤트가 모두 동일한 트랜잭션과 관련되지 않을 수 있습니다. 일부 이벤트는 트랜잭션과는 전혀 관련이 없습니다.

단일 트랜잭션에 대한 이벤트를 식별하려면 변경 스트림 이벤트 문서에서 lsidtxnNumber 조합을 사용할 수 있습니다.

collectionUUID
UUID

변경이 발생한 컬렉션을 식별하는 UUID입니다.

버전 6.0에 추가.

documentKey
문서

CRUD 작업으로 만들거나 수정한 문서의 _id 값이 들어 있는 문서입니다.

샤딩된 컬렉션의 경우 이 필드에는 문서의 전체 샤드 키도 표시됩니다. _id 필드가 이미 샤드 키의 일부인 경우 반복되지 않습니다.

fullDocument
문서

CRUD 작업에 의해 생성되거나 수정된 문서입니다.

이 필드는 fullDocument 을(를) updateLookup 으)로 설정하여 변경 스트림을 구성한 경우에만 표시됩니다. updateLookup 를 사용하여 변경 스트림을 구성하는 경우 필드는 업데이트 작업으로 수정된 문서의 현재 과반수 커밋 버전을 나타냅니다. 원래의 업데이트 작업과 전체 문서 조회 사이에 다른 다수 커밋 작업이 문서를 수정한 경우 updateDescription 에 설명된 변경 사항과 문서가 상이할 수 있습니다.

자세한 내용은 업데이트 작업을 위한 전체 문서 조회를 참조하세요.

버전 6.0에서 변경되었습니다.

MongoDB 6.0부터 db.createCollection(), create 또는 collMod을(를) 사용하여 changeStreamPreAndPostImages 옵션을 설정하면 fullDocument 필드에 문서가 삽입, 교체 또는 업데이트된 후의 문서(문서 사후 이미지)가 표시됩니다. fullDocument은(는) insert 이벤트에 항상 포함됩니다.

fullDocumentBeforeChange
문서

작업으로 변경 사항이 적용되기 전의 문서입니다. 즉, 문서 사전 이미지입니다.

이 필드는 db.createCollection() 메서드 또는 create 또는 collMod 명령을 사용하여 컬렉션에 대해 changeStreamPreAndPostImages 필드를 활성화할 때 사용할 수 있습니다.

버전 6.0에 추가.

lsid
문서

트랜잭션과 연결된 세션의 식별자입니다.

작업이 다중 문서 트랜잭션의 일부인 경우에만 표시됩니다.

ns
문서

이벤트의 영향을 받는 네임스페이스(데이터베이스 및/또는 컬렉션)입니다.

ns.coll
문자열

이벤트가 발생한 컬렉션의 이름입니다.

ns.db
문자열

이벤트가 발생한 데이터베이스의 이름입니다.

operationType
문자열

변경 알림이 보고하는 작업 유형입니다.

이러한 변경 이벤트에 대해 update 값을 반환합니다.

updateDescription
문서

업데이트 작업으로 업데이트되거나 제거된 필드를 설명하는 문서입니다.

updateDescription.
removedFields
배열

업데이트 작업으로 제거된 필드의 배열입니다.

updateDescription.
truncatedArrays
배열

다음 단계 중 하나 이상을 사용하여 파이프라인 기반 업데이트로 수행한 배열 잘림을 기록하는 문서 배열입니다.

전체 배열이 교체되면 잘린 내용이 updateDescription.updatedFields 아래에 보고됩니다.

updateDescription.
truncatedArrays.
field
문자열

잘린 필드의 이름입니다.

updateDescription.
truncatedArrays.
newSize
integer

잘린 배열 내 요소의 수입니다.

updateDescription.
updatedFields
문서

업데이트 작업으로 수정된 필드에 해당하는 키가 있는 문서입니다. 각 필드의 값은 새 값을 생성한 작업이 아니라 해당 필드의 새 값에 해당합니다.

txnNumber
NumberLong

트랜잭션을 고유하게 식별하는 데 도움이 되는 번호인 lsid와 함께 사용됩니다.

작업이 다중 문서 트랜잭션의 일부인 경우에만 표시됩니다.

wallTime

데이터베이스 작업의 서버 날짜 및 시간입니다. wallTime은(는) clusterTime이(가) 데이터베이스 작업 이벤트와 관련된 oplog 항목에서 가져온 타임스탬프라는 점에서 clusterTime와(과) 다릅니다.

버전 6.0에 추가.

MongoDB 6.0부터 다음 단계를 수행하면 문서가 변경(또는 삭제) 되기 전의 필드가 포함된 fullDocumentBeforeChange 문서가 표시됩니다.

  1. db.createCollection(), create, 또는 collMod을(를) 사용하는 컬렉션에 대해 새 changeStreamPreAndPostImages 필드를 활성화합니다.

  2. fullDocumentBeforeChange을(를) "required" 또는 db.collection.watch() 에서 "whenAvailable"(으)로 설정합니다.

변경 스트림 출력의 예시 fullDocumentBeforeChange 문서입니다.

"fullDocumentBeforeChange" : {
"_id" : ObjectId("599af247bb69cd89961c986d"),
"userName" : "alice123",
"name" : "Alice Smith"
}

변경 스트림s 출력에 대한 전체 예시는 전후 이미지를 포함하는 문서의 변경 스트림s를 참조하세요.

이미지가 다음과 같은 경우 변경 스트림 이벤트에 사전 및 사후 이미지를 사용할 수 없습니다.

  • 문서 업데이트 또는 삭제 작업 시 collection에서 활성화되지 않았습니다.

  • expireAfterSeconds에서 전후 이미지 보존 시간 설정 이후에 제거됩니다.

    • 다음 예시에서는 전체 클러스터에서 expireAfterSeconds100초로 설정합니다.

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )
    • 다음 예시에서는 expireAfterSeconds 등 현재 changeStreamOptions 설정을 반환합니다.

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • expireAfterSecondsoff로 설정하면 기본 보존 정책이 사용되며, 해당 변경 스트림 이벤트가 oplog에서 제거될 때까지 사전 및 사후 이미지가 보존됩니다.

    • 변경 스트림 이벤트가 oplog에서 제거되면 expireAfterSeconds 사전 및 사후 이미지 보존 시간에 관계없이 해당 사전 및 사후 이미지도 삭제됩니다.

추가 고려 사항

  • 전후 이미지를 활성화하면 저장 공간이 소모되고 처리 시간이 늘어납니다. 필요한 경우에만 전후 이미지를 활성화하세요.

  • 변경 스트림 이벤트 크기를 16메가바이트 미만으로 제한합니다. 이벤트 크기를 제한하려면 다음을 수행하면 됩니다.

    • 문서 크기를 8메가바이트로 제한합니다. updateDescription과 같은 다른 변경 스트림 이벤트 필드가 크지 않은 경우 변경 스트림 출력에서 사전 및 사후 이미지를 동시에 요청할 수 있습니다.

    • updateDescription과 같은 다른 변경 스트림 이벤트 필드가 크지 않은 경우 최대 16메가바이트 문서에 대해 변경 스트림 출력에서 사후 이미지만 요청합니다.

    • 다음과 같은 경우 최대 16메가바이트의 문서에 대해 변경 스트림 출력에서 사전 이미지만 요청합니다.

      • 문서 업데이트가 문서 구조나 내용의 작은 부분에만 영향을 미칩니다. 그리고

      • replace 변경 이벤트를 발생시키지 않습니다. replace 이벤트에는 항상 후이미지가 포함됩니다.

  • 사전 이미지를 요청하려면 db.collection.watch()에서 fullDocumentBeforeChangerequired 또는 whenAvailable로 설정합니다. 사후 이미지를 요청하려면 동일한 방법으로 fullDocument를 설정합니다.

  • 사전 이미지가 config.system.preimages 컬렉션에 기록됩니다.

    • config.system.preimages collection은 커질 수 있습니다. collection 크기를 제한하려면 앞서 표시된 대로 사전 이미지에 대해 expireAfterSeconds 시간을 설정할 수 있습니다.

    • 사전 이미지는 백그라운드 프로세스가 비동기적으로 제거합니다.

중요

이전 버전과 호환되지 않는 기능

MongoDB 6.0부터는 변경 스트림에 문서 사전 및 사후 이미지를 사용하는 경우 이전 MongoDB 버전으로 다운그레이드하기 전에 collMod 명령을 사용하여 각 collection에 대해 changeStreamPreAndPostImages를 비활성화해야 합니다.

다음도 참조하세요.

다음 예시는 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
} ]
},
"fullDocument": {
"_id": ObjectId("58a4eb4a30c75625e00d2820"),
"name": "Alice",
"userName": "alice123",
"email": "alice@10gen.com",
"team": "replication"
}
}

fullDocument 문서는 업데이트된 문서의 최신 다수 커밋 버전을 나타냅니다. fullDocument 문서는 업데이트 작업과 문서 조회 사이에 발생한 과반수 커밋 작업의 인터리빙 수에 따라 업데이트 작업 당시의 문서와 다를 수 있습니다.

돌아가기

shardCollection