정의
- $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") } } 
MongoDB .NET/ C# 운전자 사용하여 $changeStream 집계 파이프라인 에 단계를  추가하려면 PipelineDefinition 객체 에서 ChangeStream() 메서드를 호출합니다.
다음 예시 변경 스트림 커서 반환하는 파이프라인 단계를 만듭니다.
var pipeline = new EmptyPipelineDefinition<Movie>()     .ChangeStream(); 
ChangeStreamStageOptions 객체 사용하여 변경 스트림 의 동작을 사용자 지정할 수 있습니다. 다음 예시 이전 예시 와 동일한 $changeStream 작업을 수행하지만 다음 옵션을 지정합니다.
- FullDocument옵션은 업데이트 작업으로 수정된 경우 변경 알림 전체 문서 의 사본이 포함되지 않도록 지정합니다.
- StartAtOperationTime옵션은 변경 스트림 의 논리적 점 지정합니다.
var changeStreamOptions = new ChangeStreamStageOptions() {     FullDocument = ChangeStreamFullDocumentOption.Default,     StartAtOperationTime = new BsonTimestamp(300), }; var pipeline = new EmptyPipelineDefinition<Movie>()     .ChangeStream(changeStreamOptions); 
참고
Watch() 메서드 선호
가능하면 이 집계 단계 대신 IMongoCollection<TDocument>.Watch() 메서드를 사용합니다. 후속 단계에서 재개 토큰(_id)을 프로젝트 하거나 결과 커서 자동으로 재개되지 않도록 하려는 경우에만 ChangeStream() 메서드를 사용합니다.
watch() 메서드와 aggregate() 메서드를 모두 사용하여 $changeStream 작업을 실행할 수 있습니다. $changeStream 는 MongoDB Collection 객체의 watch() 메서드에 집계 파이프라인 전달할 때 ChangeStreamCursor 를 반환합니다. $changeStream 는 집계 파이프라인 aggregate() 메서드에 전달할 때 AggregationCursor 를 반환합니다.
중요
$changeStream 재개 가능성
변경 스트림 aggregate() 메서드에 전달하면 변경 스트림 재개할 수 없습니다. 변경 스트림 watch() 메서드에 전달하는 경우에만 다시 시작됩니다. 재개 가능성에 대해 자세히 학습하려면 변경 스트림 재개를 참조하세요.
다음 예시 ChangeStreamCursor을 반환하는 파이프라인 만들고 실행합니다.
const pipeline = [{ $changeStream: {} }]; const changeStream = collection.watch(pipeline); return changeStream; 
ChangeStreamOptions 객체 사용하여 변경 스트림 의 동작을 사용자 지정할 수 있습니다. 다음 예시 이전 예시 와 동일한 $changeStream 작업을 수행하지만 다음 옵션을 지정합니다.
- fullDocument옵션은 업데이트 작업으로 문서 수정되는 경우 변경 알림 전체 문서 의 사본이 포함되도록 지정합니다.
- startAtOperationTime옵션은 변경 스트림 의 논리적 점 지정합니다.
const pipeline = [   {     $changeStream: {       fullDocument: 'updateLookup',       startAtOperationTime: 3000     }   } ]; const changeStream = collection.watch(pipeline); return changeStream; 
자세히 알아보기
변경 스트림 알림에 관한 자세한 내용은 변경 이벤트에서 확인하세요.
관련 파이프라인 단계에 대해 자세히 학습 $changeStreamSplitLargeEvent 가이드 참조하세요.