클래스: Mongo::커서 비공개
- 상속:
-
객체
- 객체
- Mongo::커서
- 확장자:
- 전달 가능
- 다음을 포함합니다.
- 열거 가능, 재시도 가능
- 다음에 정의됨:
- 빌드/ Ruby-driver-v2.19/lib/mongo/ 커서.rb,
빌드/ Ruby-driver-v2.19/lib/mongo/ 커서/kill_spec.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 의 쿼리 결과 설정하다 에 대한 반복자의 클라이언트 사이드 표현입니다.
Cursor
객체는 애플리케이션 코드에 직접 노출되지 않습니다. 오히려 Collection::View
은 Enumerable
인터페이스를 애플리케이션에 노출하고 열거자는 Cursor
인스턴스의 지원을 받습니다.
직접 알려진 하위 클래스
네임스페이스 아래에 정의됨
클래스: killSpec
인스턴스 속성 요약 접기
- #initial_result ⇒ 객체 읽기 전용 비공개
-
#resume_token ⇒ BSON::Document | nil
읽기 전용
비공개
변경 스트림 재개를 위해 커서로 추적한 재개 토큰입니다.
- #서버 ⇒ 객체 읽기 전용 비공개
-
#view ⇒ Collection::View
읽기 전용
비공개
보기 컬렉션 보기.
클래스 메서드 요약 접기
-
.finalize(kill_spec, cluster) ⇒ Proc
비공개
가비지 컬렉션 을 위한 커서 를 마무리합니다.
인스턴스 메서드 요약 접기
-
#batch_size ⇒ 정수
비공개
배치 크기를 가져옵니다.
-
#close ⇒ nil
비공개
이 커서 를 닫고 클라이언트 와 서버 의 관련 리소스를 모두 해제합니다.
-
#닫았나요? ⇒ 참, 거짓
비공개
커서가 닫혀 있습니까?
-
#collection_name ⇒ string
비공개
구문 분석된 컬렉션 이름을 가져옵니다.
-
#각각 ⇒ 열거자
비공개
쿼리에서 반환된 문서를 반복합니다.
- #완전히 반복되었나요? ⇒ 부울 비공개
-
#get_more ⇒ Array<BSON::Document>
비공개
getMore 명령을 실행하고 서버 에서 가져온 문서 배치 를 반환합니다.
-
#ID ⇒ 정수
비공개
커서 ID를 가져옵니다.
-
#initialize(view, 결과, 서버, options = {}) ⇒ 커서
생성자
비공개
Cursor
객체를 생성합니다. -
#검사 ⇒ string
비공개
사람이 읽을 수 있는
Cursor
의 string 표현을 가져옵니다. - #kill_spec(connection_global_id) ⇒ 객체 비공개
-
#to_return ⇒ 정수
비공개
반환할 문서 수를 가져옵니다.
-
#try_next ⇒ BSON::Document | nil
비공개
사용 가능한 경우 쿼리 에서 하나의 문서 를 반환합니다.
Retryable에 포함된 메서드
#read_Worker, #select_server, #write_Worker
생성자 세부 정보
#initialize(보기, 결과, 서버, 옵션 = {}) ⇒ 커서
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
Cursor
객체를 생성합니다.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 69 def 초기화(보기, 결과, 서버, = {}) 하지 않는 한 결과.is_a?(작업::결과) 올리다 ArgumentError, "두 번째 인수는 다음과 같아야 합니다. Mongo::Operation::Result: #{결과.검사}" end @view = 보기 @server = 서버 @initial_result = 결과 @namespace = 결과.namespace @remaining = limit 만약 제한된? set_cursor_id(결과) 만약 @cursor_id.nil? 올리다 ArgumentError, '결과에 커서 ID가 있어야 합니다.' end @connection_global_id = 결과.connection_global_id @options = @session = @options[:session] @explicitly_closed = 거짓 @ 락 = 뮤텍스.신규 하지 않는 한 닫힘? 등록 ObjectSpace.describe_finalizer(self, self.클래스.마무리(kill_spec(@connection_global_id), cluster)) end end |
인스턴스 속성 세부 정보
#initial_result ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
99 100 101 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 99 def initial_result @initial_result end |
#resume_token ⇒ BSON::Document | nil (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
변경 스트림 재개를 위해 커서 로 추적한 재개 토큰
50 51 52 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 50 def resume_token @resume_token end |
#서버 ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
96 97 98 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 96 def 서버 @server end |
#view ⇒ Collection::View (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
뷰를 반환합니다. 컬렉션 뷰를 반환합니다.
44 45 46 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 44 def 보기 @view end |
클래스 메서드 세부 정보
.finalize(kill_spec, cluster) ⇒ Proc
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
가비지 컬렉션을 위해 커서를 마무리합니다. 이 커서가 클러스터의 CursorReaper에 의해 실행되는 killCursors 작업에 포함되도록 예약합니다.
110 111 112 113 114 115 116 117 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 110 def self.마무리(kill_spec, cluster) 하지 않는 한 killSpec === kill_spec 올리다 ArgumentError, "첫 번째 인수는 다음 과 같아야 합니다. end proc do cluster.Schedule_kill_cursor(kill_spec) end end |
인스턴스 메서드 세부 정보
#batch_size ⇒ 정수
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
배치 크기를 가져옵니다.
261 262 263 264 265 266 267 268 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 261 def batch_size value = @view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit 만약 value == 0 nil other value end end |
#close ⇒ nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 커서 를 닫고 클라이언트 와 서버 의 관련 리소스를 모두 해제합니다.
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 287 def 닫기 반환 만약 닫힘? 등록 취소 read_with_one_retry do 사양 = { coll_name: collection_name, db_name: database.이름, cursor_ids: [id], } op = 작업::killCursors.신규(사양) execution_operation(op) end nil 구출 오류::OperationFailure, 오류::SocketError, 오류::SocketTimeoutError, 오류::ServerNotUsable # 오류를 처리하면 알림이 표시되므로 오류를 처리합니다. 보장 end_session @cursor_id = 0 @ 락.동기화 do @explicitly_closed = true end end |
#닫았나요? ⇒ true, false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서가 닫혀 있습니까?
278 279 280 281 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 278 def 닫힘? # @cursor_id는 원칙적으로 nil이 아니어야 합니다. @cursor_id.nil? || @cursor_id == 0 end |
#collection_name ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
구문 분석된 컬렉션 이름을 가져옵니다.
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 320 def collection_name # 대부분의 경우 컬렉션 이름과 동일합니다. 운전자 의 # 객체 입니다. 그러나 경우에 따라(예: 연결된 # Atlas Data Lake), find 명령에 의해 반환된 네임스페이스 # 다를 수 있으므로 컬렉션 이름 기반을 사용하고자 합니다. # 명령 결과의 네임스페이스에 추가됩니다. 만약 @namespace # 네임스페이스 는 "데이터베이스. 컬렉션" 형식인 경우가 많습니다. # 그러나 컬렉션 이름에 마침표가 포함되는 경우도 있습니다. # 이것이 이 메서드가 첫 번째 네임스페이스 구성 요소 이후에 모든 네임스페이스 구성 요소를 조인하는 이유입니다. ns_components = @namespace.split('.') ns_components[1...ns_components.분량].가입('.') other 컬렉션.이름 end end |
#각각 ⇒ 열거자
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
쿼리에서 반환된 문서를 반복합니다.
커서 는 최대 한 번만 반복될 수 있습니다. 불완전한 이터레이션도 허용됩니다. 커서 를 두 번 이상 반복하려고 하면 InvalidCursorOperation이 발생합니다.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 145 def 각 # 첫 번째 배치를 이미 반복한 경우(예: get_more # 최소 한 번), 서버 측의 커서가 과거를 지난 경우 # 첫 번째 배치를 만들고 다음을 수행하여 처음부터 반복을 다시 시작합니다. # 초기 결과를 반환하면 두 번째 배치 의 문서가 누락됩니다. # 이후 커서 가 있는 위치까지 일괄 처리됩니다. 이를 감지합니다. # 조건을 지정하고 반복을 중단합니다. # # 향후 운전자 버전에서는 각각 다음과 같이 계속됩니다. # 이전 반복의 끝 또는 항상 다음 위치에서 다시 시작 # 시작. 만약 @get_more_call 올리다 오류::InvalidCursorOperation, 'getMore를 실행한 커서 의 반복을 다시 시작할 수 없습니다.' end #2.10 이전 버전과의 호환성을 유지하기 위해 드라이버 버전, 재설정 # 새 반복이 시작될 때마다 문서가 배열 됩니다. @documents = nil 만약 block_given? # try_next에 의해 발생한 StopIteration은 이 루프를 종료합니다. 루프 do 문서 = try_next 만약 명시적으로_closed? 올리다 오류::InvalidCursorOperation, '커서가 명시적으로 닫혔습니다. ' end yield 문서 만약 문서 end self other 문서 = [] # try_next에 의해 발생한 StopIteration은 이 루프를 종료합니다. 루프 do 문서 = try_next 만약 명시적으로_closed? 올리다 오류::InvalidCursorOperation, '커서가 명시적으로 닫혔습니다. ' end 문서 << 문서 만약 문서 end 문서 end end |
#완전히 반복되었나요? ⇒ 부울
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
394 395 396 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 394 def 완전히 반복되나요? !!@fully_iterated end |
#get_more ⇒ Array<BSON::Document>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
getMore 명령을 실행하고 서버 에서 가져온 문서 배치 를 반환합니다.
370 371 372 373 374 375 376 377 378 379 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 370 def get_more @get_more_call = true # 최신 재시도 가능 읽기 사양은 getMores 재시도를 금지합니다. # getMores를 재시도하는 데 레거시 재시도 가능 읽기 로직이 사용되었지만, 이후 # 이렇게 하면 조용히 데이터 손실이 발생할 수 있으며, 운전자 는 더 이상 재시도하지 않습니다. 어떤 상황에서도 # getMore 작업을 수행할 수 있습니다. # https://github.com/mongodb/specations/lob/master/source/retryable-reads/retryable-reads.rst#qa 프로세스(execution_operation(get_more_operation)) end |
#id ⇒ Integer
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 ID가 0 이면 서버 에서 커서 가 닫혔음을 의미합니다.
커서 ID를 가져옵니다.
347 348 349 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 347 def id @cursor_id end |
#검사 ⇒ string
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
사람이 읽을 수 있는 Cursor
의 string 표현을 가져옵니다.
127 128 129 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 127 def 검사 "#<Mongo::Cursor:0x#{object_id} @view=#{@view.검사}>" end |
#kill_spec(connection_global_id) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
382 383 384 385 386 387 388 389 390 391 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 382 def kill_spec(connection_global_id) killSpec.신규( cursor_id: id, coll_name: collection_name, db_name: database.이름, connection_global_id: connection_global_id, server_address: 서버.주소, 세션: @session, ) end |
#to_return ⇒ Integer
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환할 문서 수를 가져옵니다. 3.0 이하의 서버 버전에서 사용됩니다.
360 361 362 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 360 def to_return use_limit? ? @remaining : (batch_size || 0) end |
#try_next ⇒ BSON::Document | nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 방법은 실험적이며 변경될 수 있습니다.
사용 가능한 경우 쿼리 에서 하나의 문서 를 반환합니다.
이 메서드는 서버 의 변경 사항을 최대 max_await_time_ms 밀리초 동안 기다리며, 변경 사항이 수신되지 않으면 nil을 반환합니다. 서버 에서 반환할 문서가 더 이상 없거나 커서 를 모두 사용한 경우 StopIteration 예외가 발생합니다.
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 205 def try_next 만약 @documents.nil? # Mongoid의 게시된 버전에는 이전 운전자 커서 의 복사본이 있으므로 # 코드에서 프로세스 의 중복 호출은 Mongoid 쿼리 가 실행될 때 # 호출되지 않습니다. 캐시 #개가 활성화되어 있습니다. 여기에서 dup을 호출하여 이 문제를 해결하세요. # Mongoid의 코드에서 나올 수 있는 # 프로세스 의 결과입니다. @documents = 프로세스(@initial_result).dup # 여기에 있는 문서는 빈 배열일 수 있으므로 # 첫 번째 try_next 호출에서 getMore를 발행하게 될 수 있습니다. end 만약 @documents.비어 있나요? # 빈 배치에서는 배치 재개 토큰을 캐시 합니다. cache_batch_resume_token 하지 않는 한 닫힘? 만약 지쳐? 닫기 @fully_iterated = true 올리다 StopIteration end @documents = get_more other @fully_iterated = true 올리다 StopIteration end other # 커서가 여기에 닫힙니다. # 문서를 빈 배열 로 유지 end # 문서가 하나 이상 있는 경우 해당 문서 의 _id 를 캐시 합니다. 만약 @documents[0] cache_resume_token(@documents[0]) end # 반복하는 경우 배치 재개 토큰을 캐시합니다. # 마지막 문서 위에 덮어쓰거나 배치가 비어 있는 경우 만약 @documents.size <= 1 cache_batch_resume_token 만약 닫힘? @fully_iterated = true end end 반환 @documents.shift end |