클래스: Mongo::커서 비공개

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
열거 가능, 재시도 가능
다음에 정의됨:
빌드/ Ruby-driver-v2.19/lib/mongo/ 커서.rb,
빌드/ Ruby-driver-v2.19/lib/mongo/ 커서/kill_spec.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서버 의 쿼리 결과 설정하다 에 대한 반복자의 클라이언트 사이드 표현입니다.

Cursor 객체는 애플리케이션 코드에 직접 노출되지 않습니다. 오히려 Collection::ViewEnumerable 인터페이스를 애플리케이션에 노출하고 열거자는 Cursor 인스턴스의 지원을 받습니다.

예시:

이름이 Emily인 5 사용자 배열 을 가져옵니다.

users.find({:name => 'Emily'}).limit(5).to_a

각 사용자 문서에서 차단을 호출합니다.

users.find.each { |doc| puts doc }

직접 알려진 하위 클래스

캐싱 커서

네임스페이스 아래에 정의됨

클래스: killSpec

인스턴스 속성 요약 접기

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

Retryable에 포함된 메서드

#read_Worker, #select_server, #write_Worker

생성자 세부 정보

#initialize(보기, 결과, 서버, 옵션 = {}) ⇒ 커서

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

Cursor 객체를 생성합니다.

예시:

커서를 인스턴스화합니다.

Mongo::Cursor.new(view, response, server)

매개변수:

  • 보기 (CollectionView)

    쿼리를 정의하는 CollectionView 입니다.

  • 결과 (Operation::Result)

    첫 번째 실행의 결과입니다.

  • 서버 (MongoDB 서버)

    이 커서 가 잠겨 있는 서버 입니다.

  • 옵션 (해시) (기본값: {})

    커서 옵션.

옵션 해시(options):

  • :disable_retry (true, false)

    getMore 작업을 보낼 때 오류 발생 시 재시도를 비활성화할지 여부(사용 중단됨, getMore 작업은 더 이상 재시도되지 않음)

  • :retry_reads (true, false)

    읽기 재시도(최신 메커니즘에 따라), 기본값은 true입니다.

이후:

  • 2.0.0



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_tokenBSON::Document | nil (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

변경 스트림 재개를 위해 커서 로 추적한 재개 토큰

반환합니다:

  • (BSON::Document | nil)

    커서 재개 토큰입니다.



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

#viewCollection::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 작업에 포함되도록 예약합니다.

매개변수:

  • kill_spec (Cursor::KillSpec)

    KillCursor 작업 사양입니다.

  • cluster (Mongo::Cluster)

    이 커서 및 해당 서버와 연결된 클러스터입니다.

반환합니다:

  • (Proc)

    종료자.



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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

배치 크기를 가져옵니다.

예시:

배치 크기를 가져옵니다.

cursor.batch_size

반환합니다:

  • (정수)

    배치 크기입니다.

이후:

  • 2.2.0



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

#closenil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이 커서 를 닫고 클라이언트 와 서버 의 관련 리소스를 모두 해제합니다.

반환합니다:

  • (nil)

    항상 nil입니다.



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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

커서가 닫혀 있습니까?

예시:

커서가 닫혀 있습니까?

cursor.closed?

반환합니다:

  • (true, false)

    커서가 닫힌 경우.

이후:

  • 2.2.0



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_namestring

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

구문 분석된 컬렉션 이름을 가져옵니다.

예시:

구문 분석된 컬렉션 이름을 가져옵니다.

cursor.coll_name

반환합니다:

  • (string)

    컬렉션 이름입니다.

이후:

  • 2.2.0



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이 발생합니다.

예시:

커서에 있는 문서를 반복합니다.

cursor.each do |doc|
  ...
end

반환합니다:

  • (열거자)

    열거자입니다.

이후:

  • 2.0.0



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_moreArray<BSON::Document>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

getMore 명령을 실행하고 서버 에서 가져온 문서 배치 를 반환합니다.

반환합니다:

  • (Array<BSON::Document>)

    문서 배치



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

#idInteger

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

커서 ID가 0 이면 서버 에서 커서 가 닫혔음을 의미합니다.

커서 ID를 가져옵니다.

예시:

커서 ID를 가져옵니다.

cursor.id

반환합니다:

  • (정수)

    커서 ID입니다.

이후:

  • 2.2.0



347
348
349
# 파일 'build/ruby-driver-v2.19/lib/mongo/cursor.rb', 줄 347

def id
  @cursor_id
end

#검사string

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

사람이 읽을 수 있는 Cursor의 string 표현을 가져옵니다.

예시:

커서를 검사합니다.

cursor.inspect

반환합니다:

  • (string)

    Cursor 인스턴스의 string 표현입니다.

이후:

  • 2.0.0



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_returnInteger

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환할 문서 수를 가져옵니다. 3.0 이하의 서버 버전에서 사용됩니다.

예시:

반환할 번호를 가져옵니다.

cursor.to_return

반환합니다:

  • (정수)

    반환할 문서 수입니다.

이후:

  • 2.2.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_nextBSON::Document | nil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이 방법은 실험적이며 변경될 수 있습니다.

사용 가능한 경우 쿼리 에서 하나의 문서 를 반환합니다.

이 메서드는 서버 의 변경 사항을 최대 max_await_time_ms 밀리초 동안 기다리며, 변경 사항이 수신되지 않으면 nil을 반환합니다. 서버 에서 반환할 문서가 더 이상 없거나 커서 를 모두 사용한 경우 StopIteration 예외가 발생합니다.

반환합니다:

  • (BSON::Document | 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