정의
cursor.noCursorTimeout()중요
Mongo쉬 방법
이 페이지에서는 메서드를
mongosh설명합니다. 이는 Node.js와 같은 언어별 운전자 에 대한 설명서가 아닙니다.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
일정 시간 동안 활동이 없어도 커서가 자동으로 닫히지 않도록 서버에 지시합니다.
noCursorTimeout()메서드의 프로토타입 형식은 다음과 같습니다.db.collection.find(<query>).noCursorTimeout()
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0 및 Flex 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
행동
세션 유휴 시간 제한 재정의 noCursorTimeout
MongoDB 드라이버와 는 승인되지 않은 쓰기 mongosh (write) 작업을 제외한 모든 작업을 서버 세션과 연결합니다. Mongo.startSession() 세션과 명시적으로 연결되지 않은 작업(예: 사용)의 경우, MongoDB 드라이버와 는 mongosh 암시적 세션을 생성하여 작업과 연결합니다.
세션이 분 이상 유휴 상태인 30 경우 MongoDB 서버 해당 세션을 만료된 것으로 표시하고 언제든지 세션을 닫을 수 있습니다. MongoDB 서버 세션을 닫으면 진행 중인 모든 작업과 세션과 관련된 열린 커서도 종료됩니다. 여기에는 noCursorTimeout() maxTimeMS() 30 분보다 큰 또는 로 구성된 커서가 포함됩니다.
로 cursor.noCursorTimeout() 를 db.collection.find() 발행하는 애플리케이션 을 생각해 보세요. 서버 의 에 의해 정의된 문서 배치 cursor.batchSize() find()와 함께 커서 반환합니다. 애플리케이션 서버 에 새 문서 배치 를 요청할 때마다 세션이 새로 고쳐집니다. 그러나 애플리케이션 30 현재 문서 배치 를 프로세스 데 분 이상 소요되면 세션이 만료로 표시되고 닫힙니다. 서버 세션을 닫으면 커서 noCursorTimeout() 도 로 구성되어 있음에도 불구하고 커서 됩니다. 애플리케이션 다음 문서 배치 요청하면 서버 오류를 반환합니다.
커서 새로 고침 refreshSessions
커서를 반환하는 작업의 경우 커서가 30분 이상 유휴 상태일 수 있는 경우 Mongo.startSession()를 사용하여 명시적 세션 내에서 작업을 실행하고 refreshSessions 명령을 사용하여 세션을 주기적으로 새로 고칩니다. 예시:
var session = db.getMongo().startSession() var sessionId = session sessionId // show the sessionId var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout() var refreshTimestamp = new Date() // take note of time at operation start while (cursor.hasNext()) { // Check if more than 5 minutes have passed since the last refresh if ( (new Date()-refreshTimestamp)/1000 > 300 ) { print("refreshing session") db.adminCommand({"refreshSessions" : [sessionId]}) refreshTimestamp = new Date() } // process cursor normally }
예시 작업에서db.collection.find()메서드는 명시적 세션과 연결됩니다. 유휴 상태일 때 서버 커서 닫지 못하도록 커서cursor.noCursorTimeout()로 구성됩니다. while 루프에는refreshSessions를 사용하여 5 분마다 세션을 새로 고치는 차단 포함되어 있습니다. 세션이 30 분의 유휴 시간 제한을 초과하지 않으므로 커서 무기한 열린 상태로 유지될 수 있습니다.
MongoDB 드라이버의 경우, 세션 생성에 대한 지침과 구문은 드라이버 설명서를 참조하세요.