クラス: 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#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

以来

  • 2.0.0



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
107
108
# ファイル 'lib/mongo/cursor.rb', 行 74

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

  @view = 表示
  @server = サーバー
  @initial_result = 結果
  @namespace = 結果.namespace
  @remaining = limit 場合 限定的な?
  set_cursor_id(結果)
  場合 @cursor_id.nil?
    発生 ArgumentError, 'カーソル ID が結果に存在する必要があります
  end
  @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
  @lock = ミューテックス.新着情報
  場合 サーバー.load_ balancer?
    # 負荷分散されたトポロジーのみでカーソル内の接続が必要です。
    #それ以外の場合は、それへの追加の参照は必要ありません。
    @ connection = @initial_result.接続
  end
  場合 閉じましたか
    checkpoint_in_ connection
  else
    Register
    ObjectSpace.refine_ finalizer(
      自己,
      自己.クラス.finalize(kill_spec(@ connection_ global_id), クラスター)
    )
  end
end

インスタンス属性の詳細

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

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



117
118
119
# ファイル 'lib/mongo/cursor.rb', 行 117

デフォルト 接続
  @ connection
end

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

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

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

次の値を返します。

  • 操作::Context

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



53
54
55
# ファイル 'lib/mongo/cursor.rb', 行 53

デフォルト context
  @context
end

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

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



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

デフォルト initial_result
  @initial_result
end

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

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

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

次の値を返します。

  • (BSON::Document | nil)

    カーソル 再開トークン。



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

デフォルト resume_token
  @resume_token
end

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

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



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

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

# view = Collection::View (readonly)

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

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

次の値を返します。



44
45
46
# ファイル 'lib/mongo/cursor.rb', 行 44

デフォルト 表示
  @view
end

クラスメソッドの詳細

finalize (kill_spec, cluster)= Proc

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

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

パラメーター:

  • kill_spec (Cursor::KillSpec)

    killCursor 操作の仕様。

  • クラスター Mongo::Cluster

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

次の値を返します。

  • Proc

    アナライザ。



128
129
130
131
132
133
134
135
# ファイル 'lib/mongo/cursor.rb', 行 128

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

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

# batch_size =整数

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

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

例:

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

cursor.batch_size

次の値を返します。

  • (整数)

    バッチ サイズ。

以来

  • 2.2.0



279
280
281
282
283
284
285
286
# ファイル 'lib/mongo/cursor.rb', 行 279

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

#close(opts = {}) = nil

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

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

次の値を返します。

  • (nil)

    常に nil です。



305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# ファイル 'lib/mongo/cursor.rb', 行 305

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

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

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

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

#閉じました= truefalse

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

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

例:

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

cursor.closed?

次の値を返します。

  • truefalse

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

以来

  • 2.2.0



296
297
298
299
# ファイル 'lib/mongo/cursor.rb', 行 296

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

# collection_name = string

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

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

例:

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

cursor.coll_name

次の値を返します。

  • ( string )

    コレクション名。

以来

  • 2.2.0



341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
# ファイル 'lib/mongo/cursor.rb', 行 341

デフォルト 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



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
200
201
202
203
204
205
# ファイル 'lib/mongo/cursor.rb', 行 163

デフォルト 

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

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

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

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

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

次の値を返します。

  • ブール値


416
417
418
# ファイル 'lib/mongo/cursor.rb', 行 416

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

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

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

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

次の値を返します。

  • 配列<BSON::Document>

    ドキュメントのバッチ



391
392
393
394
395
396
397
398
399
400
# ファイル 'lib/mongo/cursor.rb', 行 391

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

  最近の再試行可能な読み取りの仕様では、 getMores の再試行は禁止されています。
  # getMores の再試行に使用されるレガシー再試行可能な読み取りロジック
  を実行するとサイレントデータが失われる可能性があり、ドライバーは再試行しなくなります
  任意の状況で getMore 操作を実行します。
  https://github.com/mongodb/specions/lob/ Master/source/retryable-reads/retryable-reads.md#qa
  プロセス(execution_operation(get_ more_operation))
end

#idInteger

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

注:

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

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

例:

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

cursor.id

次の値を返します。

  • (整数)

    カーソル ID。

以来

  • 2.2.0



368
369
370
# ファイル 'lib/mongo/cursor.rb', 行 368

デフォルト id
  @cursor_id
end

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

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

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

例:

カーソルを調べます。

cursor.inspect

次の値を返します。

  • ( string )

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

以来

  • 2.0.0



145
146
147
# ファイル 'lib/mongo/cursor.rb', 行 145

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

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

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



403
404
405
406
407
408
409
410
411
412
413
# ファイル 'lib/mongo/cursor.rb', 行 403

デフォルト 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

#to_returnInteger

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

返されるドキュメントの数を取得します。 3.0以前のサーバー バージョンで使用されます。

例:

返す数値を取得します。

cursor.to_return

次の値を返します。

  • (整数)

    返されるドキュメントの数。

以来

  • 2.2.0



381
382
383
# ファイル 'lib/mongo/cursor.rb', 行 381

デフォルト to_return
  use_limit? ? @remaining : (batch_size || 0)
end

#try_nextBSON::Document | nil

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

注:

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

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

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

次の値を返します。

  • (BSON::Document | nil)

    ドキュメント。

次の値が発生します。

  • 反復停止

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



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
260
261
262
263
264
265
266
267
268
269
# ファイル 'lib/mongo/cursor.rb', 行 223

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

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

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

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

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

  return @documents.シフト
end