$changeStream (집계)
이 페이지의 내용
정의
$changeStream
컬렉션, 데이터베이스 또는 전체 클러스터 에서 변경 스트림 커서 를 반환합니다. 집계 파이프라인 의 첫 번째 단계로 사용해야 합니다.
$changeStream
단계의 구문은 다음과 같습니다.{ $changeStream: { allChangesForCluster: <boolean>, fullDocument: <string>, fullDocumentBeforeChange: <string>, resumeAfter: <document> showExpandedEvents: <boolean>, startAfter: <document> startAtOperationTime: <timestamp> } } Parameter설명allChangesForCluster
선택 사항: 변경 스트림에 클러스터의 모든 변경 사항이 포함되어야 하는지 여부를 설정합니다.admin
데이터베이스에서만 열 수 있습니다.fullDocument
선택 사항:
update
작업으로 수정된 경우 변경 알림에 전체 문서의 사본을 포함할지 여부를 지정합니다.default
: 변경 알림에update
작업에 대한 전체 문서가 포함되어 있지 않습니다.required
: 변경 알림에 변경 직후 나타난 수정된 문서의 복사본이 포함됩니다. 문서를 찾을 수 없는 경우 변경 스트림에서 오류가 발생합니다.이 옵션을 사용하려면 먼저
collMod
명령을 사용하여changeStreamPreAndPostImages
옵션을 활성화해야 합니다.버전 6.0에 추가.
updateLookup
: 변경 알림에는 변경으로 수정된 문서의 복사본이 포함됩니다. 이 문서는 현재 가장 많이 커밋된 문서이거나null
(문서가 더 이상 존재하지 않는 경우)입니다.whenAvailable
: 변경 알림에는 변경 직후에 나타난 수정된 문서의 사본이 포함되며, 문서를 사용할 수 없는 경우에는null
이 포함됩니다.이 옵션을 사용하려면 먼저
collMod
명령을 사용하여changeStreamPreAndPostImages
옵션을 활성화해야 합니다.버전 6.0에 추가.
부분 업데이트의 경우 변경 알림에는 변경에 대한 설명도 제공됩니다.
fullDocumentBeforeChange
변경 전의 전체 문서를 포함하세요. 이 필드에는 다음 값을 사용할 수 있습니다.
off
: 변경 전의 문서를 포함하지 않습니다.whenAvailable
: 변경 전의 문서를 포함합니다. 수정되지 않은 문서를 사용할 수 없는 경우 쿼리가 실패하지 않습니다.required
: 변경 전의 문서를 포함합니다. 수정되지 않은 문서를 사용할 수 없으면 쿼리가 실패합니다.
resumeAfter
선택 사항입니다. 변경 스트림의 논리적 시작점으로 재개 토큰 을 지정합니다.
invalidate
이벤트 이후에 변경 스트림을 재개하는 데 사용할 수 없습니다.resumeAfter
의 경우startAfter
및startAtOperationTime
과 상호 배타적입니다.showExpandedEvents
DDL, 인덱스 작업 등 추가 변경 이벤트를 포함할지 여부를 지정합니다.
버전 6.0에 추가.
startAfter
선택 사항입니다. 변경 스트림의 논리적 시작점으로 재개 토큰을 지정합니다.
resumeAfter
와 달리startAfter
는 새로운 변경 스트림을 생성하여invalidate
이벤트 후에 알림을 재개할 수 있습니다.startAfter
의 경우resumeAfter
및startAtOperationTime
과 상호 배타적입니다.startAtOperationTime
변경 스트림의 논리적 시작점으로 시간을 지정합니다.resumeAfter
또는startAfter
필드와 함께 사용할 수 없습니다.
Stable API 지원
변경 스트림은 Stable API V1 에 포함되어 있습니다. 그러나 showExpandedEvents 옵션은 Stable API V1 에 포함되어 있지 않습니다.
예시
집계 단계를 사용하여 변경 스트림 커서를 생성하려면 aggregate
명령을 실행합니다.
var cur = db.names.aggregate( [ { $changeStream: {} } ] )
커서를 열려면 cur
을(를) 실행합니다.
변경 스트림이 변경 사항을 감지하면 next()
메서드는 변경 이벤트 알림을 반환합니다. 예를 들어 cur.next()
를 실행한 후 MongoDB는 다음과 유사한 문서를 반환합니다.
{ "_id": { _data: "8262E2EE54000000022B022C0100296E5A100448E5E3DD01364019AE8FE8C6859527E046645F6964006462E2EE54C8756C0D5CF6F0720004" }, "operationType": "insert", "clusterTime": Timestamp({ t: 1659039316, i: 2 }), "wallTime": ISODate("2022-07-28T20:15:16.148Z"), "fullDocument": { "_id": ObjectId("62e2ee54c8756c0d5cf6f072"), "name": "Walker Percy" }, "ns": { "db": "test", "coll": "names" }, "documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") } }
변경 스트림 알림에 관한 자세한 내용은 변경 이벤트에서 확인하세요.