문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

replace 이벤트

이 페이지의 내용

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

replace 이벤트는 replaceOne 메서드가 호출될 때와 같이 업데이트 작업이 컬렉션에서 문서를 제거하고 새 문서로 대체할 때 발생합니다.

필드
유형
설명
_id
문서

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

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

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

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

clusterTime
타임스탬프

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

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

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

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

버전 4.0에 추가.

collectionUUID
UUID

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

버전 6.0에 추가.

documentKey
문서

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

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

fullDocument
문서

작업으로 생성된 새 문서입니다.

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

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

fullDocumentBeforeChange
문서

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

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

버전 6.0에 추가.

lsid
문서

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

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

버전 4.0에 추가.

ns
문서

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

ns.coll
문자열

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

ns.db
문자열

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

operationType
문자열

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

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

txnNumber
NumberLong

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

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

버전 4.0에 추가.

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"
}

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

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

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

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

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

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

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

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

추가 고려 사항

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

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

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

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

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

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

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

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

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

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

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

중요

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

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

다음도 참조하세요.

다음 예시는 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 은 대체 문서 삽입 후의 문서를 나타냅니다.

← 이름 변경