クラス: Mongo::Cursor Private

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

Overview

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

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

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

例:

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

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

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

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

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

CacheCursor

名前空間で定義済み

クラス: KillSpec

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

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

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

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

#read_worker#select_server#write_worker

コンストラクターの詳細

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

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

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

例:

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

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

パラメーター:

  • 表示 (CollectionView)

    クエリを定義するCollectionView

  • 結果 操作 :: 結果

    最初の実行の結果。

  • サーバー サーバー

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

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

    カーソル オプション。

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

  • :disable_retry truefalse

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

  • :retry_reads truefalse

    読み取りの再試行(最新のメカニズムに従って)、デフォルトは 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-v 2.19 /lib/mongo/cursor.rb', 行69

デフォルト 初期化(表示, 結果, サーバー, 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
  @ connection_ global_id = 結果.connection_ global_id
  @options = options
  @session = @options[:session]
  @explain_closed = false
  @lock = ミューテックス.新着情報
  ただし、 閉じましたか
    Register
    ObjectSpace.refine_ finalizer(自己, 自己.クラス.finalize(kill_spec(@ connection_ global_id),
      クラスター))
  end
end

インスタンス属性の詳細

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

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



99
100
101
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行99

デフォルト initial_result
  @initial_result
end

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

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

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

次の値を返します。

  • (BSON::Document | nil)

    カーソル 再開トークン。



50
51
52
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行50

デフォルト resume_token
  @resume_token
end

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

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



96
97
98
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行96

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

# view = Collection::View (readonly)

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

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

次の値を返します。



44
45
46
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行44

デフォルト 表示
  @view
end

クラスメソッドの詳細

finalize (kill_spec, cluster)= Proc

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

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

パラメーター:

  • kill_spec (Cursor::KillSpec)

    killCursor 操作の仕様。

  • クラスター Mongo::Cluster

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

次の値を返します。

  • Proc

    アナライザ。



110
111
112
113
114
115
116
117
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行110

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



261
262
263
264
265
266
267
268
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行261

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

閉じる= nil

このメソッドは、プライベート 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-v 2.19 /lib/mongo/cursor.rb', 行287

デフォルト 閉じる
  return 場合 閉じましたか

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

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

#閉じました= truefalse

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

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

例:

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

cursor.closed?

次の値を返します。

  • truefalse

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

以来

  • 2.2.0



278
279
280
281
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行278

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

# collection_name = string

このメソッドは、プライベート 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-v 2.19 /lib/mongo/cursor.rb', 行320

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



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-v 2.19 /lib/mongo/cursor.rb', 行145

デフォルト 

  # すでに最初のバッチするの過去の反復処理を実行した場合(つまり、 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

次の値を返します。

  • ブール値


394
395
396
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行394

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

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

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

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

次の値を返します。

  • 配列<BSON::Document>

    ドキュメントのバッチ



370
371
372
373
374
375
376
377
378
379
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行370

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

  最近の再試行可能な読み取りの仕様では、 getMores の再試行は禁止されています。
  # getMores の再試行に使用されるレガシー再試行可能な読み取りロジック
  を実行するとサイレントデータが失われる可能性があり、ドライバーは再試行しなくなります
  任意の状況で getMore 操作を実行します。
  https://github.com/mongodb/specions/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-v 2.19 /lib/mongo/cursor.rb', 行347

デフォルト id
  @cursor_id
end

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

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

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

例:

カーソルを調べます。

cursor.inspect

次の値を返します。

  • ( string )

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

以来

  • 2.0.0



127
128
129
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行127

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

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

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



382
383
384
385
386
387
388
389
390
391
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行382

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

#to_returnInteger

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

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

例:

返す数値を取得します。

cursor.to_return

次の値を返します。

  • (整数)

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

以来

  • 2.2.0



360
361
362
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cursor.rb', 行360

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

#try_nextBSON::Document | nil

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

注:

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

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

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

次の値を返します。

  • (BSON::Document | nil)

    ドキュメント。

次の値が発生します。

  • 反復停止

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



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-v 2.19 /lib/mongo/cursor.rb', 行205

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