문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

db.collection.watch()

이 페이지의 내용

  • 정의
  • 가용성
  • 배포
  • 스토리지 엔진
  • 읽기 고려 majority 지원
  • 행동
  • 재개 가능성
  • 업데이트 작업의 전체 문서 조회
  • 액세스 제어
  • 커서 반복
  • 예제
  • Change Stream 열기
  • 전체 문서 업데이트 조회를 통한 Change Stream
  • 전후 이미지를 포함하는 문서의 Change Streams
  • aggregation pipeline 필터로 스트림 변경하기
  • 변경 스트림 재개하기
db.collection.watch( pipeline, options )

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령이나 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다 .

데이터베이스 명령의 경우 $changeStream 애그리게이션 단계가 있는 aggregate 명령을 참조하세요.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

레거시 mongo 셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.

Mongo 셸 V4.4

복제본 세트 및 샤드 클러스터 전용

컬렉션에서 change stream 커서를 엽니다.

매개변수
유형
설명
pipeline
배열

선택 사항입니다. 다음 집계 단계 중 하나 이상으로 구성된 집계 파이프라인:

변경 이벤트 출력을 필터링/수정할 파이프라인을 지정합니다.

MongoDB 4.2부터 변경 스트림 집계 파이프라인이 이벤트의 _id 필드를 수정하면 변경 스트림이 예외를 스로우합니다.

options
문서

options 문서에는 다음과 같은 필드 및 값이 포함될 수 있습니다.

필드
유형
설명
resumeAfter
문서

선택 사항. 재개 토큰에 지정된 작업 이후부터 알림 재개를 시도하도록 watch() 에 지시합니다.

각 변경 스트림 이벤트 문서에는 _id 필드로 이력서 토큰이 포함되어 있습니다. 이후에 재개하려는 작업을 나타내는 변경 이벤트 문서의 전체 _id 필드를 전달하십시오.

resumeAfter 의 경우 startAfterstartAtOperationTime과 상호 배타적입니다.

startAfter
문서

선택 사항. 재개 토큰에 지정된 작업 후 새 변경 스트림 시작을 시도하도록 watch() 에 지시합니다. 무효화 이벤트 후 알림을 다시 시작할 수 있습니다.

각 변경 스트림 이벤트 문서에는 _id 필드로 이력서 토큰이 포함되어 있습니다. 이후에 재개하려는 작업을 나타내는 변경 이벤트 문서의 전체 _id 필드를 전달하십시오.

startAfter 의 경우 resumeAfterstartAtOperationTime과 상호 배타적입니다.

버전 4.2에 추가되었습니다.

fullDocument
문자열

선택 사항. 기본적으로 watch() 는 업데이트된 전체 문서 대신 업데이트 작업으로 수정된 필드의 델타를 반환합니다.

fullDocument"updateLookup" 로 설정하여 watch() 가 업데이트된 문서의 최신 과반수 커밋 버전을 찾도록 지시합니다. watch()updateDescription 델타에 더해 문서 조회가 포함된 fullDocument 필드를 반환합니다.

MongoDB 6.0부터 fullDocument를 다음으로 설정할 수 있습니다.

  • "whenAvailable" 은 문서를 삽입, 교체, 업데이트한 후 문서 사후 이미지(사용 가능한 경우)로 출력합니다.

  • "required" 문서가 삽입, 교체 또는 업데이트된 후의 문서 사후 이미지를 출력합니다. 사후 이미지를 사용할 수 없는 경우 오류가 발생합니다.

fullDocumentBeforeChange
문자열

선택 사항.

MongoDB 6.0부터는 새로운 fullDocumentBeforeChange 필드를 사용하여 다음과 같이 설정할 수 있습니다:

  • "whenAvailable" 문서를 교체, 업데이트 또는 삭제하기 전에 사전 이미지 문서(사용 가능한 경우)를 출력합니다.

  • "required" 는 문서가 교체, 업데이트, 삭제되기 전의 문서 사전 이미지를 출력합니다. 사전 이미지를 사용할 수 없는 경우 오류가 발생합니다.

  • "off" 을(를) 입력하여 문서 사전 이미지를 표시하지 않도록 합니다. 기본값은 "off"입니다.

batchSize
int

선택 사항입니다. MongoDB cluster의 각 응답 배치에서 반환할 최대 변경 이벤트 수를 지정합니다.

cursor.batchSize()와 동일한 기능을 갖습니다.

maxAwaitTimeMS
int

선택 사항입니다. 서버가 빈 배치를 반환하기 전에 변경 스트림 커서에 보고할 새 데이터 변경 내용을 기다리는 최대 시간(밀리초)입니다.

기본값은 1000밀리초입니다.

collation
문서

선택 사항입니다. 데이터 정렬 문서를 전달하여 변경 스트림 커서에 대한 데이터 정렬을 지정합니다.

MongoDB 4.2부터 생략된 경우 기본적으로 이진 비교 simple로 설정됩니다. 이전 버전에서는 단일 collection에서 열린 변경 스트림이 collection의 기본 데이터 정렬을 상속받았습니다.

showExpandedEvents
부울

선택 사항. MongoDB 6.0부터 변경 스트림은 createIndexesdropIndexes 이벤트와 같은 DDL 이벤트에 대한 변경 알림을 지원합니다. 변경 스트림에 확장 이벤트를 포함하려면 showExpandedEvents 옵션을 사용하여 변경 스트림 커서를 생성합니다.

버전 6.0에 추가.

startAtOperationTime
타임스탬프

선택 사항입니다. 변경 스트림의 시작 지점입니다. 지정된 시작점이 과거인 경우 oplog의 시간 범위 내에 있어야 합니다. oplog의 시간 범위를 확인하려면 rs.printReplicationInfo()를 참조하십시오.

startAtOperationTime 의 경우 resumeAfterstartAfter과 상호 배타적입니다.

반환합니다:MongoDB 배포에 대한 연결이 열려있고 동시에 컬렉션이 존재하는 한 커서가 열려 있는 상태로 유지됩니다. 변경 이벤트 문서의 예는 변경 이벤트 문서를 참조하세요.

다음도 참조하세요.

db.watch() 개인정보 정책에 Mongo.watch()

db.collection.watch() 는 복제본 세트 및 샤드 클러스터 배포에 사용할 수 있습니다.

Wired Tiger 스토리지 엔진 에는 만 db.collection.watch()사용할 수 있습니다.

MongoDB 4.2부터 변경 스트림"majority" 읽기 고려 지원과 무관하게 이용 가능합니다. 즉, 읽기 고려 majority 지원은 변경 스트림 사용 시 활성화(기본값)하거나 비활성화할 수 있습니다.

MongoDB 4.0 이하 버전에서는 읽기 우려 지원을 "majority"를 사용하도록 설정한 경우에만변경 스트림을 사용할 수 있습니다(기본값).

  • db.collection.watch() 대부분의 데이터 보유 멤버에게 지속된 데이터 변경 사항에 대해서만 알립니다.

  • 변경 스트림 커서는 다음 중 하나가 발생할 때까지 열려 있습니다.

    • 커서가 명시적으로 닫힙니다.

    • 무효화 이벤트가 발생합니다. 예를 들어 컬렉션 삭제 또는 이름 바꾸기가 있습니다.

    • MongoDB 배포에 대한 연결이 닫히거나 시간 초과됩니다. 자세한 내용은 Cursor Behaviors를 참조하십시오.

    • 배포가 분할된 클러스터인 경우 분할 제거로 인해 열린 변경 스트림 커서가 닫힐 수 있으며 닫힌 변경 스트림 커서가 완전히 재개되지 않을 수 있습니다.

MongoDB 드라이버 와 달리 mongosh 은 오류 발생 후 변경 스트림 커서를 자동으로 재개하려고 시도하지 않습니다. MongoDB 드라이버는 특정 오류 발생 후 변경 스트림 커서를 자동으로 재개하려고 한 번 시도합니다.

db.collection.watch() 는 oplog에 저장된 정보를 사용하여 변경 이벤트 설명을 생성하고 해당 작업과 관련된 재개 토큰을 생성합니다. 재개 토큰으로 식별되어 resumeAfter 또는 startAfter 옵션에 전달된 작업이 이미 oplog 에서 삭제된 경우 db.collection.watch() 는 변경 스트림을 재개할 수 없습니다.

변경 스트림 재개에 대한 자세한 내용은 변경 스트림 재개를 참조하십시오.

참고

  • 무효화 이벤트(예: 컬렉션 삭제 또는 이름 바꾸기)로 인해 스트림이 닫힌 후에는 resumeAfter를 사용하여 변경 스트림을 다시 시작할 수 없습니다. MongoDB 4.2부터는 무효화 이벤트 후 startAfter를 사용하여 새 변경 스트림을 시작할 수 있습니다.

  • 배포가 분할된 클러스터인 경우 분할 제거로 인해 열린 변경 스트림 커서가 닫힐 수 있으며 닫힌 변경 스트림 커서가 완전히 재개되지 않을 수 있습니다.

참고

무효화 이벤트(예: 컬렉션 삭제 또는 이름 바꾸기)로 인해 스트림이 닫힌 후에는 resumeAfter를 사용하여 변경 스트림을 다시 시작할 수 없습니다. MongoDB 4.2부터는 무효화 이벤트 후 startAfter를 사용하여 새 변경 스트림을 시작할 수 있습니다.

기본적으로 변경 스트림 커서는 업데이트 작업에 대한 특정 필드 변경 사항/델타를 반환합니다. 또한 변경된 문서의 현재 과반수가 커밋된 버전을 조회하고 반환하도록 변경 스트림을 구성할 수 있습니다. 업데이트와 조회 사이에 발생했을 수 있는 다른 쓰기 작업에 따라 반환된 문서는 업데이트 당시의 문서와 크게 다를 수 있습니다.

업데이트 작업 중에 적용된 변경 사항 수와 전체 문서의 크기에 따라 업데이트 작업에 대한 변경 이벤트 문서의 크기가 16MB BSON 문서 제한보다 클 위험이 있습니다. 이런 일이 발생하면 서버는 변경 스트림 커서를 닫고 오류를 반환합니다.

액세스 제어와 함께 실행하는 경우, 사용자는 컬렉션 리소스에 대해 findchangeStream 권한 조치를 가지고 있어야 합니다. 즉, 사용자의 역할이 다음 권한을 부여해야 합니다.

{ resource: { db: <dbname>, collection: <collection> }, actions: [ "find", "changeStream" ] }

기본 제공 read 역할은 적절한 권한을 제공합니다.

MongoDB는 커서를 반복하는 다양한 방법을 제공합니다.

cursor.hasNext() 메서드는 다음 이벤트를 차단하고 기다립니다. watchCursor 커서를 모니터링하고 이벤트를 반복하려면 hasNext()를 다음과 같이 사용합니다.

while (!watchCursor.isClosed()) {
if (watchCursor.hasNext()) {
firstChange = watchCursor.next();
break;
}
}

cursor.tryNext() 메서드는 비차단입니다. watchCursor 커서를 모니터링하고 이벤트를 반복하려면 tryNext()를 다음과 같이 사용합니다.

while (!watchCursor.isClosed()) {
let next = watchCursor.tryNext()
while (next !== null) {
printjson(next);
next = watchCursor.tryNext()
}
}

다음 작업으로 data.sensors collection에 대한 변경 스트림 커서를 엽니다.

watchCursor = db.getSiblingDB("data").sensors.watch()

커서를 반복하여 새 이벤트를 확인합니다. 2} 메서드를 cursor.isClosed() 메서드와 함께 cursor.tryNext()를 사용하여 변경 스트림 커서가 닫혀 있고 최신 배치에 개체가 남아 있지 않은 경우에만 루프가 종료되도록 합니다:

while (!watchCursor.isClosed()) {
let next = watchCursor.tryNext()
while (next !== null) {
printjson(next);
next = watchCursor.tryNext()
}
}

변경 스트림 출력에 대한 전체 문서는 변경 이벤트를 참조하십시오.

참고

변경 스트림에는 isExhausted()를 사용할 수 없습니다.

fullDocument 옵션을 "updateLookup"(으)로 설정하여 change stream 커서가 업데이트 change stream 이벤트와 연관된 문서의 가장 최근의 다수 커밋 버전을 조회하도록 지시합니다.

다음 연산은 fullDocument : "updateLookup" 옵션을 사용하여 data.sensors collection에 대해 change stream 커서를 엽니다.

watchCursor = db.getSiblingDB("data").sensors.watch(
[],
{ fullDocument : "updateLookup" }
)

커서를 반복하여 새 이벤트를 확인합니다. 2} 메서드를 cursor.isClosed() 메서드와 함께 cursor.tryNext()를 사용하여 변경 스트림 커서가 닫혀 있고 최신 배치에 개체가 남아 있지 않은 경우에만 루프가 종료되도록 합니다:

while (!watchCursor.isClosed()) {
let next = watchCursor.tryNext()
while (next !== null) {
printjson(next);
next = watchCursor.tryNext()
}
}

모든 업데이트 작업의 경우 변경 이벤트는 fullDocument 필드의 문서 조회 결과를 반환합니다.

전체 문서 업데이트 출력의 예는 change stream 업데이트 이벤트를 참조하세요.

변경 스트림 출력에 대한 전체 문서는 변경 이벤트를 참조하십시오.

MongoDB 6.0부터는 변경 스트림 이벤트를 사용하여 문서의 변경 전후 버전(문서의 전후 이미지)을 출력할 수 있습니다.

  • 사전 이미지는 문서가 교체, 업데이트 또는 삭제되기 전의 문서입니다. 삽입된 문서에는 사전 이미지가 없습니다.

  • 사후 이미지는 문서가 삽입, 교체, 업데이트된 후의 문서입니다. 삭제된 문서에 대한 사후 이미지가 없습니다.

  • db.createCollection(), create 또는 collMod을(를) 사용하는 컬렉션에 대해 changeStreamPreAndPostImages을(를) 활성화하세요.

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

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

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

    • 다음 예에서는 전체 cluster에서 expireAfterSeconds100 초로 설정합니다.

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } }
      } )
    • 다음 예에서는 특정 collection에서 expireAfterSeconds ~ 100 초를 설정합니다.

      use admin
      db.getSiblingDB("my_collection")
      .sensors.watch({ 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를 비활성화해야 합니다.

다음도 참조하세요.

다음과 같이 changeStreamPreAndPostImages가 허용된 temperatureSensor collection을 만드세요.

db.createCollection(
"temperatureSensor",
{ changeStreamPreAndPostImages: { enabled: true } }
)

temperatureSensor collection을 온도 측정값으로 채웁니다.

db.temperatureSensor.insertMany( [
{ "_id" : 0, "reading" : 26.1 },
{ "_id" : 1, "reading" : 25.9 },
{ "_id" : 2, "reading" : 24.3 },
{ "_id" : 3, "reading" : 22.4 },
{ "_id" : 4, "reading" : 24.6 }
] )

다음 섹션에서는 temperatureSensor 컬렉션을 사용하는 문서 사전 및 사후 이미지를 위한 변경 스트림의 예시를 보여 줍니다.

fullDocumentBeforeChange: "whenAvailable" 설정을 사용하여 문서 사전 이미지를 출력합니다(사용 가능한 경우). 사전 이미지는 교체, 업데이트 또는 삭제되기 전의 문서입니다. 삽입된 문서에는 사전 이미지가 없습니다.

다음 예시에서는 fullDocumentBeforeChange: "whenAvailable"을 사용하여 temperatureSensor collection에 대한 변경 스트림 커서를 생성합니다.

watchCursorFullDocumentBeforeChange = db.temperatureSensor.watch(
[],
{ fullDocumentBeforeChange: "whenAvailable" }
)

다음 예시에서는 커서를 사용하여 새 변경 스트림 이벤트를 확인합니다.

while ( !watchCursorFullDocumentBeforeChange.isClosed() ) {
if ( watchCursorFullDocumentBeforeChange.hasNext() ) {
printjson( watchCursorFullDocumentBeforeChange.next() );
}
}

예를 들면 다음과 같습니다.

  • 커서가 닫힐 때까지 while 루프가 실행됩니다.

  • 커서에 문서가 있는 경우 hasNext()true를 반환합니다.

다음 예시는 temperatureSensor 문서의 reading 필드를 업데이트합니다.

db.temperatureSensor.updateOne(
{ _id: 2 },
{ $set: { reading: 22.1 } }
)

temperatureSensor 문서가 업데이트된 후에는 변경 이벤트가 fullDocumentBeforeChange 필드에 문서 사전 이미지를 출력합니다. 사전 이미지에는 업데이트되기 전의 temperatureSensor 문서 reading 필드가 포함되어 있습니다. 예를 들면 다음과 같습니다.

{
"_id" : {
"_data" : "82624B21...",
"_typeBits" : BinData(0,"QA==")
},
"operationType" : "update",
"clusterTime" : Timestamp(1649090957, 1),
"ns" : {
"db" : "test",
"coll" : "temperatureSensor"
},
"documentKey" : {
"_id" : 2
},
"updateDescription" : {
"updatedFields" : {
"reading" : 22.1
},
"removedFields" : [ ],
"truncatedArrays" : [ ]
},
"fullDocumentBeforeChange" : {
"_id" : 2,
"reading" : 24.3
}
}

다음도 참조하세요.

fullDocument: "whenAvailable" 설정을 사용하여 문서 사후 이미지를 출력합니다(사용 가능한 경우). 사후 이미지는 문서가 삽입, 교체 또는 업데이트된 후의 문서입니다. 삭제된 문서의 사후 이미지는 없습니다.

다음 예시에서는 fullDocument: "whenAvailable"을 사용하여 temperatureSensor collection에 대한 변경 스트림 커서를 생성합니다.

watchCursorFullDocument = db.temperatureSensor.watch(
[],
{ fullDocument: "whenAvailable" }
)

다음 예시에서는 커서를 사용하여 새 변경 스트림 이벤트를 확인합니다.

while ( !watchCursorFullDocument.isClosed() ) {
if ( watchCursorFullDocument.hasNext() ) {
printjson( watchCursorFullDocument.next() );
}
}

예를 들면 다음과 같습니다.

  • 커서가 닫힐 때까지 while 루프가 실행됩니다.

  • 커서에 문서가 있는 경우 hasNext()true를 반환합니다.

다음 예시는 temperatureSensor 문서의 reading 필드를 업데이트합니다.

db.temperatureSensor.updateOne(
{ _id: 1 },
{ $set: { reading: 29.5 } }
)

temperatureSensor 문서가 업데이트된 후에는 변경 이벤트가 fullDocument 필드에 문서 사후 이미지를 출력합니다. 사후 이미지에는 업데이트된 후의 temperatureSensor 문서 reading 필드가 포함되어 있습니다. 예를 들면 다음과 같습니다.

{
"_id" : {
"_data" : "8262474D...",
"_typeBits" : BinData(0,"QA==")
},
"operationType" : "update",
"clusterTime" : Timestamp(1648840090, 1),
"fullDocument" : {
"_id" : 1,
"reading" : 29.5
},
"ns" : {
"db" : "test",
"coll" : "temperatureSensor"
},
"documentKey" : {
"_id" : 1
},
"updateDescription" : {
"updatedFields" : {
"reading" : 29.5
},
"removedFields" : [ ],
"truncatedArrays" : [ ]
}
}

다음도 참조하세요.

참고

MongoDB 4.2부터 변경 스트림 집계 파이프라인이 이벤트의 _id 필드를 수정하면 변경 스트림이 예외를 스로우합니다.

다음 작업에서는 insert 이벤트만 필터링하기 위해 aggregation pipeline을 사용하여 data.sensors collection에 대해 변경 스트림 커서를 엽니다.

watchCursor = db.getSiblingDB("data").sensors.watch(
[
{ $match : {"operationType" : "insert" } }
]
)

커서를 반복하여 새 이벤트를 확인합니다. 2} 메서드를 cursor.isClosed() 메서드와 함께 cursor.hasNext()를 사용하여 변경 스트림 커서가 닫혀 있고 최신 배치에 개체가 남아 있지 않은 경우에만 루프가 종료되도록 합니다:

while (!watchCursor.isClosed()){
if (watchCursor.hasNext()){
printjson(watchCursor.next());
}
}

change stream 커서는 operationTypeinsert인 변경 이벤트만 반환합니다. change stream 출력에 대한 전체 문서는 변경 이벤트를 참조하세요.

변경 스트림 커서가 반환하는 모든 문서에는 _id 필드로 재개 토큰이 포함되어 있습니다. 변경 스트림을 재개하려면watch()resumeAfter 또는 startAfter 옵션에 다시 시작하려는 변경 이벤트의 전체 _id 문서를 전달합니다

다음 작업에서는 재개 토큰을 사용하여 data.sensors collection에 대해 변경 스트림 커서를 재개합니다. 여기서는 재개 토큰을 생성한 작업이 클러스터의 oplog에서 롤오프되지 않았다고 가정합니다.

let watchCursor = db.getSiblingDB("data").sensors.watch();
let firstChange;
while (!watchCursor.isClosed()) {
if (watchCursor.hasNext()) {
firstChange = watchCursor.next();
break;
}
}
watchCursor.close();
let resumeToken = firstChange._id;
resumedWatchCursor = db.getSiblingDB("data").sensors.watch(
[],
{ resumeAfter : resumeToken }
)

커서를 반복하여 새 이벤트를 확인합니다. 2} 메서드를 cursor.isClosed() 메서드와 함께 cursor.hasNext()를 사용하여 변경 스트림 커서가 닫혀 있고 최신 배치에 개체가 남아 있지 않은 경우에만 루프가 종료되도록 합니다:

while (!resumedWatchCursor.isClosed()){
if (resumedWatchCursor.hasNext()){
print(resumedWatchCursor.next());
}
}

변경 스트림 재개에 대한 전체 문서는 변경 스트림 재개를 참조하세요.

← db.collection.updateMany()