커서 는 쿼리 결과를 가리킵니다. 커서를 사용하면 데이터베이스 결과를 한 번에 한 배치 반복할 수 있습니다.
사용 사례
find() 및 aggregate() 메서드는 결과 배치 와 함께 커서 반환합니다. 커서 수동으로 반복하거나 toArray() 를 사용하여 문서에 액세스 . 자세한 내용은 mongosh에서 커서 반복하기를 참조하세요.
고정 사이즈 컬렉션의 경우 tailable cursor 사용하여 문서가 삽입될 때 조회 . 자세한 내용은 테일 커서(tailable cursor)를 참조하세요.
행동
MongoDB는 다음과 같은 경우 클라이언트 세션 내에서 생성된 커서를 닫습니다.
클라이언트 커서 소진합니다.
커서 수동으로 닫습니다.
세션을 수동으로 종료합니다.
세션 시간이 초과되었습니다.
cursorTimeoutMillis 는 유휴 커서의 시간 초과를 설정합니다(기본값: 10 분). 이 시간이 지나면 MongoDB 세션 외부의 유휴 커서를 닫습니다. 배치 반환하면 제한 시간이 연장됩니다. killCursors 를 사용하여 커서를 수동으로 닫습니다.
localLogicalSessionTimeoutMinutes 는 세션 시간 제한을 설정합니다(기본값: 30 분). 세션을 연장하려면 refreshSessions 를 사용하고 세션을 종료하려면 killSessions 를 사용합니다.
드라이버 및 mongosh 는 명시적 세션 외부에서 열린 커서에 대해 암시적 세션을 생성합니다.
커서 사용 중 동시 업데이트
커서 문서를 반환할 때 읽기 고려 (read concern) 수준에 따라 다른 작업이 배경 에서 실행 결과에 영향을 미칠 수 있습니다. 자세한 내용은 격리, 일관성 및 최신성 읽기를 참조하세요.
존재하지 않는 mongos 데이터베이스에 대한 커서 결과
MongoDB 7.2부터 mongos 배포에서 존재하지 않는 데이터베이스를 사용하려고 하는 집계 파이프라인 쿼리는 유효성 검사 오류를 반환합니다.
이전 버전에서는 이러한 애그리게이션 쿼리가 빈 커서를 반환했습니다.
시작하기
세부 정보
find 및 aggregate 작업은 배치 채울 때까지 실행됩니다. 그런 다음 쿼리 일시 중지됩니다. 일시 중지된 이 쿼리는 커서 ID로 식별되는 커서입니다.
데이터베이스 는 배치 및 커서 ID 반환합니다. 드라이버 및 mongosh 는 이를 클라이언트 사이드 커서 에 저장 . 문서가 더 많은 경우 커서 getMore를 통해 다음 배치 조회합니다. cursor.objsLeftInBatch() 를 사용하여 나머지 배치 결과를 확인하고 cursor.hasNext() 를 사용하여 더 많은 결과를 확인합니다.
커서 배치
커서는 16 MiB 최대 BSON 문서 크기로 제한되는 배치로 결과를 반환합니다. cursor.batchSize() 를 사용하여 문서 제한을 설정하다 . find() 및 aggregate() 의 기본값 배치 크기는 101입니다. 후속 getMore 작업에는 기본값 제한이 없으며 16 MiB 메시지 크기만 있습니다.
정렬
인덱스 없이 정렬 작업 을 수행하는 쿼리는 결과를 반환하기 전에 모든 문서를 메모리에 로드해야 합니다.
커서 정보
db.serverStatus() 는 metrics.cursor 필드에 커서 지표 반환합니다. metrics.cursor를 참조하세요.