クラス: Mongo::Cursor Private

継承:
オブジェクト
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
次のことが含まれます。
列挙可能、再試行可能
定義:
lib/mongo/cursor.rb,
lib/mongo/cursor/kill_spec.rb,
lib/mongo/cursor/nontailable.rb

Overview

このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。

サーバー上のクエリ結果セットに対するイテレータのクライアント側表現。

Cursor オブジェクトはアプリケーション コードに直接公開されません。 あるいは、 Collection::ViewEnumerableインターフェースをアプリケーションに公開し、列挙型はCursorインスタンスによってサポートされます。

例:

emily という名前の5ユーザーの配列を取得します。

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

各ユーザー ドキュメントで ブロックを呼び出します。

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

既知のサブクラスを直接確認

CacheCursor

名前空間で定義済み

Modules: NULLではない クラス: KillSpec

インスタンス属性の概要を折りたたむ

クラスメソッドの概要を折りたたむ

インスタンス メソッドの概要を折りたたむ

再試行可能な に含まれるメソッド

#read_worker#select_server#with_overload_retry#write_worker

コンストラクターの詳細

#初期化(表示、結果、サーバー、オプション = {}) =カーソル

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Cursorオブジェクトを作成します。

例:

カーソルをインスタンス化します。

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

パラメーター:

  • 表示 (CollectionView)

    クエリを定義するCollectionView

  • 結果 操作 :: 結果

    最初の実行の結果。

  • サーバー サーバー

    このカーソルがロックされているサーバー。

  • options ハッシュ (デフォルトは{}です)

    カーソル オプション。

オプション ハッシュ( options ):

  • :context Operation::Context

    このカーソルの操作コンテキスト 。

  • :disable_retry truefalse

    getMore 操作の送信時にエラーで再試行を無効にするかどうか(非推奨、 getMore 操作は再試行されなくなりました)

  • :retry_reads truefalse

    読み取りの再試行(最新のメカニズムに従って)、デフォルトは true

次の値が発生します。

  • (ArgumentError)

以来

  • 2.0.0



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# ファイル 'lib/mongo/cursor.rb', 行 72

デフォルト 初期化(表示, 結果, サーバー, options = {})
  ただし、 結果.is_a?(操作::結果)
    発生 ArgumentError, " 2 番目の引数は Mongo::Operation::Result: #{結果. analyze }である必要があります"
  end

  @view = 表示
  @server = サーバー
  @initial_result = 結果
  @namespace = 結果.namespace
  @remaining = limit 場合 限定的な?
  set_cursor_id(結果)
  発生 ArgumentError, 'カーソル ID が結果に存在する必要があります 場合 @cursor_id.nil?

  @options = options
  @session = @options[:session]
  @ connection_ global_id = 結果.connection_ global_id
  @context = @options[:context]&.と共に(connection_ global_id: connection_ global_id_for_context) || refresh_context
  @explain_closed = false
  @get_ more_network_error = false
  @lock = ミューテックス.新着情報
  場合 サーバー.load_ balancer?
    # 負荷分散されたトポロジーのみでカーソル内の接続が必要です。
    #それ以外の場合は、それへの追加の参照は必要ありません。
    @ connection = @initial_result.接続
  end
  場合 閉じましたか
    checkpoint_in_ connection
  else
    Register
    ObjectSpace.refine_ finalizer(
      自己,
      自己.クラス.finalize(kill_spec(@ connection_ global_id), クラスター)
    )
  end
end

インスタンス属性の詳細

# 接続 = オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。



115
116
117
# ファイル 'lib/mongo/cursor.rb', 行 115

デフォルト 接続
  @ connection
end

# context Operation::Context (読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

このカーソルのコンテキストを返します。

次の値を返します。

  • 操作::Context

    このカーソルのコンテキストをコンテキストする



51
52
53
# ファイル 'lib/mongo/cursor.rb', 行 51

デフォルト context
  @context
end

# initial_result =オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。



112
113
114
# ファイル 'lib/mongo/cursor.rb', 行 112

デフォルト initial_result
  @initial_result
end

# resume_token = BSON::Document | nil (読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

変更ストリームを再開するためのカーソルによって追跡される再開トークン

次の値を返します。

  • (BSON::Document | nil)

    カーソル 再開トークン。



48
49
50
# ファイル 'lib/mongo/cursor.rb', 行 48

デフォルト resume_token
  @resume_token
end

#サーバー=オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。



109
110
111
# ファイル 'lib/mongo/cursor.rb', 行 109

デフォルト サーバー
  @server
end

# view = Collection::View (readonly)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

コレクション ビューのビューを返します。

次の値を返します。



42
43
44
# ファイル 'lib/mongo/cursor.rb', 行 42

デフォルト 表示
  @view
end

クラスメソッドの詳細

finalize (kill_spec, cluster)= Proc

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

ガベージコレクションのカーソルを終了します。このカーソルをクラスターの CursorReaper によって実行される killCursors操作に含めるようにスケジュールします。

パラメーター:

  • kill_spec (Cursor::KillSpec)

    killCursor 操作の仕様。

  • クラスター Mongo::Cluster

    このカーソルとそのサーバーに関連付けられているクラスター。

次の値を返します。

  • Proc

    アナライザ。

次の値が発生します。

  • (ArgumentError)


126
127
128
129
130
131
132
# ファイル 'lib/mongo/cursor.rb', 行 126

デフォルト 自己.finalize(kill_spec, クラスター)
  発生 ArgumentError, "最初の引数は killSpec である必要があります。 #{ kill_spec . analyze } " ただし、 kill_spec.is_a?(KillSpec)

  proc 行う
    クラスター.schedule_kill_cursor(kill_spec)
  end
end

インスタンス メソッドの詳細

# batch_size =整数

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

バッチ サイズを取得します。

例:

バッチ サイズを取得します。

cursor.batch_size

次の値を返します。

  • (整数)

    バッチ サイズ。

以来

  • 2.2.0



269
270
271
272
273
274
275
276
# ファイル 'lib/mongo/cursor.rb', 行 269

デフォルト batch_size
  価値 = (@view.batch_size & & @view.batch_size > 0) ? @view.batch_size : limit
  場合 価値 == 0
    nil
  else
    価値
  end
end

#close(opts = {}) = nil

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

このカーソルを閉じて、クライアントとサーバー上の関連するリソースを解放します。

次の値を返します。

  • (nil)

    常に nil です。



295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# ファイル 'lib/mongo/cursor.rb', 行 295

デフォルト 閉じる(ops = {})
  return 場合 閉じましたか

  ctx = context ? context.refresh(timeout_ms: ops[:timeout_ms]) : refresh_context(ops)

  unregister
  ただし、 @get_ more_network_error
    read_with_one_retry 行う
      スペック = {
        coll_name: collection_name,
        db_name: database.name,
        cursor_ids: [ id ],
      }
      op = 操作::killCursors.新着情報(スペック)
      execution_operation(op, context: ctx)
    end
  end

  nil
ヘルプ エラー::OperationFailure::ファミリー, エラー::SocketError, エラー::SocketTimeoutError, エラー::ServerNotUsable, エラー::ConnectionPershed
  # エラーを処理しても何もできないため、エラーは無視されます。
保証する
  end_session
  @cursor_id = 0
  @lock.同期 行う
    @explain_closed = true
  end
  checkpoint_in_ connection
end

#閉じました= truefalse

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

カーソルは閉じているかどうか

例:

カーソルは閉じているかどうか

cursor.closed?

次の値を返します。

  • truefalse

    カーソルが閉じている場合。

以来

  • 2.2.0



286
287
288
289
# ファイル 'lib/mongo/cursor.rb', 行 286

デフォルト 閉じましたか
  # @cursor_idは原則として nil になることはありません。
  @cursor_id.nil? || @cursor_id == 0
end

# collection_name = string

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

解析されたコレクション名を取得します。

例:

解析されたコレクション名を取得します。

cursor.coll_name

次の値を返します。

  • ( string )

    コレクション名。

以来

  • 2.2.0



333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
# ファイル 'lib/mongo/cursor.rb', 行 333

デフォルト collection_name
  # ほとんどの場合、これはコレクションの名前と同じになります
  ドライバー内の # オブジェクト。 ただし、場合によっては(接続時
  Atlas Data Lake は、 find コマンドによって返された名前空間です。
  は異なる場合があるため、コレクション名は以下に基づいて使用します
  コマンドの結果の名前空間に対する #
  場合 @namespace
    # 名前空間は "database.collection" という形式になることが多いです。
    ただし、コレクション名にピリオドが含まれる場合もあります。
    は、このメソッドが最初の の後のすべての名前空間コンポーネントを結合する理由です。
    ns_components = @namespace.分裂('.')
    ns_components[1...ns_components.Length].join('.')
  else
    コレクション.name
  end
end

#列挙型

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

クエリから返されたドキュメントを反復処理します。

カーソルを最大 1 回反復できます。 不完全な反復も許可されます。 カーソルを複数回反復処理しようとすると、 InvalidCursorOperation が発生します。

例:

カーソル内のドキュメントを反復処理します。

cursor.each do |doc|
  ...
end

次の値を返します。

  • 列挙型

    列挙型。

以来

  • 2.0.0



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
188
189
190
191
192
193
194
195
196
197
198
199
# ファイル 'lib/mongo/cursor.rb', 行 160

デフォルト 
  # すでに最初のバッチするの過去の反復処理を実行した場合(つまり、 get_ more と呼ばれた場合)
  少なくとも 1 回)、サーバー側のカーソルが過去に進んでいる
  # で最初のバッチを作成し、反復を最初から再開する
  最初の結果を返すと 2 番目のバッチではドキュメントが欠落する
  以降の バッチ では、カーソルが にある までのバッチが実行されます。 これを検出
  条件を指定し、反復を中止します。
  #
  # 将来のドライバー バージョンでは、各 は から継続されます
  # 前の反復の終了 または は常に から再開します
  # の先頭。
  場合 @get_ more_呼び出された
    発生 エラー::InvalidCursorOperation, ' getMore を発行したカーソルの反復を再開できません'
  end

  # 2.10より前との互換性を維持するには ドライバーのバージョン、リセット
  新しい反復が開始されるたびに、ドキュメント配列を します。
  @documents = nil

  場合 ブロック_指定
    このループは、try_next によって発生した #Storage により終了します。
    ループ 行う
      ドキュメント = try_next
      発生 エラー::InvalidCursorOperation, 'カーソルは明示的に閉じられた' 場合 「明示的に_閉じた」を参照してください

      ノードの数 ドキュメント 場合 ドキュメント
    end
    自己
  else
    ドキュメント = []
    このループは、try_next によって発生した #Storage により終了します。
    ループ 行う
      ドキュメント = try_next
      発生 エラー::InvalidCursorOperation, 'カーソルは明示的に閉じられた' 場合 「明示的に_閉じた」を参照してください

      ドキュメント < ドキュメント 場合 ドキュメント
    end
    ドキュメント
  end
end

完全に反復されている場合=ブール値

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

次の値を返します。

  • ブール値


409
410
411
# ファイル 'lib/mongo/cursor.rb', 行 409

デフォルト full_itated?
  !!@completed
end

# get_ more = 配列[BSON::Document ]<BSON::Document>

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

getMore コマンド を実行し、サーバーから取得したドキュメントのバッチを返します。

次の値を返します。

  • 配列<BSON::Document>

    ドキュメントのバッチ



370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
# ファイル 'lib/mongo/cursor.rb', 行 370

デフォルト get_ more
  @get_ more_呼び出された = true

  最近の再試行可能な読み取りの仕様では、 getMores の再試行は禁止されています。
  # getMores の再試行に使用されるレガシー再試行可能な読み取りロジック
  を実行するとサイレントデータが失われる可能性があり、ドライバーは再試行しなくなります
  任意の状況で getMore 操作を実行します。
  # https://github.com/mongodb/specifications/blob/master/source/retryable-reads/retryable-reads.md#qa
  #
  ただし、過負荷エラー(システムオーバーロードエラー + RetryableError)は
  サーバーが処理したことがないため、指数バックオフで再試行した
  #リクエスト。
  with_overload_retry(context: Many_refreshed_context) 行う
    プロセス(execution_operation(get_ more_operation))
  end
ヘルプ エラー::SocketError, エラー::SocketTimeoutError
  @get_ more_network_error = true
  発生
ヘルプ エラー::OperationFailure => e
  # getMore で過負荷再試行が使い果たされたら、カーソルを閉じます
  」を含む は、 killCursor がサーバーに送信されます。
  閉じる 場合 e.ラベル('RetryableError') & & e.ラベル('SystemOverloadedError')
  発生
end

#idInteger

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

注:

カーソル ID が0の場合、サーバー上でカーソルが閉じられたことを意味します。

カーソル ID を取得します。

例:

カーソル ID を取得します。

cursor.id

次の値を返します。

  • (整数)

    カーソル ID。

以来

  • 2.2.0



360
361
362
# ファイル 'lib/mongo/cursor.rb', 行 360

デフォルト id
  @cursor_id
end

詳しくは、 を 検査しstring ます

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

Cursor の人間が判読可能なstring表現を取得します。

例:

カーソルを調べます。

cursor.inspect

次の値を返します。

  • ( string )

    Cursorインスタンスの string 表現。

以来

  • 2.0.0



142
143
144
# ファイル 'lib/mongo/cursor.rb', 行 142

デフォルト 検査する
  " #< Mongo::Cursor: 0 x #{ object_id } @view= #{ @view . explain } > "
end

# kill_spec ( connection_ global_id) =オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。



396
397
398
399
400
401
402
403
404
405
406
# ファイル 'lib/mongo/cursor.rb', 行 396

デフォルト kill_spec(connection_ global_id)
  KillSpec.新着情報(
    cursor_id: id,
    coll_name: collection_name,
    db_name: database.name,
    connection_ global_id: connection_ global_id,
    server_address: サーバー.address,
    セッション: @session,
    接続: @ connection
  )
end

# refresh_timeout!オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

カーソルの COT コンテキストを更新して、次の getMore が新しいタイムアウト期限で開始されるようにします。CSO 仕様で必要とされる反復ごとのタイムアウト更新を実装するために、 追尾可能 (tailable) awaitData カーソルによって使用されます。アクティブなタイムアウトを持つ追尾可能 (tailable) awaitData カーソルである場合にのみリフレッシュされます。



419
420
421
422
423
# ファイル 'lib/mongo/cursor.rb', 行 419

デフォルト refresh_timeout。
  return ただし、 表示.cursor_type == :tailable_await & & context.タイムアウト

  @context = @context.refresh(view: 表示)
end

#try_nextBSON::Document | nil

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

注:

この方法は実験的なものであり、変更される可能性があります。

クエリから 1 つのドキュメントが利用可能な場合は返します。

このメソッドは最大_await_time_ms ミリ秒までサーバーからの変更を待機し、変更が受信されない場合は nil を返します。 サーバーから返すドキュメントがなくなる場合、またはカーソルを使い果たした場合は、 stopIteration 例外が発生します。

次の値を返します。

  • (BSON::Document | nil)

    ドキュメント。

次の値が発生します。

  • 反復停止

    カーソルが完全に反復された後に、 の呼び出しで発生します。



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
252
253
254
255
256
257
258
259
# ファイル 'lib/mongo/cursor.rb', 行 217

デフォルト try_next
  場合 @documents.nil?
    公開バージョンの Mongoid には古いドライバーカーソルのコピーがあるため
    # コードでは、Mongoid クエリの場合、プロセス内の dup 呼び出しは呼び出されません
    # キャッシュはアクティブです。 ここで dup も呼び出すことで、その回避策はあります。
    は、Mongoid のコードから取得される可能性のある プロセスの結果です。
    @documents = プロセス(@initial_result).dup
    # ここでのドキュメントは空の配列にすることができ、したがって
    #最初のtry_next呼び出しで getMore の発行が終了する可能性があります
  end

  場合 @documents.空の場合
    # 空のバッチでは、バッチ再開トークンをキャッシュします
    cache_batch_resume_token

    場合 閉じましたか
      @completed = true
      発生 反復の停止
    else
      場合 使い果たされたかどうか
        閉じる
        @completed = true
        発生 反復の停止
      end
      @documents = get_ more
    end
  else
    # カーソルはここで閉じている
    # ドキュメントを空の配列として保持
  end

  # 少なくとも 1 つのドキュメントがある場合は、その _id をキャッシュします
  cache_resume_token(@documents[0]) 場合 @documents[0]

  # 反復処理している場合は、バッチ再開トークンをキャッシュする
  最後のドキュメントに対して、またはバッチが空の場合は
  場合 @documents.サイズ <= 1
    cache_batch_resume_token
    @completed = true 場合 閉じましたか
  end

  @documents.シフト
end