Class: Mongo::Cursor
- Inherits:
-
Object
- Object
- Mongo::Cursor
- Extended by:
- Forwardable
- Includes:
- Enumerable, Retryable
- Defined in:
- lib/mongo/cursor.rb,
lib/mongo/cursor/builder/op_get_more.rb,
lib/mongo/cursor/builder/op_kill_cursors.rb,
lib/mongo/cursor/builder/get_more_command.rb,
lib/mongo/cursor/builder/kill_cursors_command.rb
Overview
The Cursor
API is semipublic.
Client-side representation of an iterator over a query result set on the server.
A Cursor
is not created directly by a user. Rather, CollectionView
creates a Cursor
in an Enumerable module method.
Defined Under Namespace
Modules: Builder
Instance Attribute Summary collapse
-
#view ⇒ Collection::View
readonly
View The collection view.
Class Method Summary collapse
-
.finalize(cursor_id, cluster, op_spec, server, session) ⇒ Proc
Finalize the cursor for garbage collection.
Instance Method Summary collapse
-
#batch_size ⇒ Integer
Get the batch size.
-
#closed? ⇒ true, false
Is the cursor closed?.
-
#collection_name ⇒ String
Get the parsed collection name.
-
#each ⇒ Enumerator
Iterate through documents returned from the query.
-
#id ⇒ Integer
Get the cursor id.
-
#initialize(view, result, server, options = {}) ⇒ Cursor
constructor
Creates a
Cursor
object. -
#inspect ⇒ String
Get a human-readable string representation of
Cursor
. -
#to_return ⇒ Integer
Get the number of documents to return.
-
#try_next ⇒ BSON::Document | nil
private
Return one document from the query, if one is available.
Methods included from Retryable
#read_with_one_retry, #read_with_retry, #write_with_retry
Constructor Details
#initialize(view, result, server, options = {}) ⇒ Cursor
Creates a Cursor
object.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/mongo/cursor.rb', line 59 def initialize(view, result, server, = {}) @view = view @server = server @initial_result = result @remaining = limit if limited? @cursor_id = result.cursor_id @coll_name = nil = @session = [:session] register if @cursor_id && @cursor_id > 0 ObjectSpace.define_finalizer(self, self.class.finalize(@cursor_id, cluster, kill_cursors_op_spec, server, @session)) end end |
Instance Attribute Details
#view ⇒ Collection::View (readonly)
Returns view The collection view.
43 44 45 |
# File 'lib/mongo/cursor.rb', line 43 def view @view end |
Class Method Details
.finalize(cursor_id, cluster, op_spec, server, session) ⇒ Proc
Finalize the cursor for garbage collection. Schedules this cursor to be included in a killCursors operation executed by the Cluster’s CursorReaper.
93 94 95 96 97 98 |
# File 'lib/mongo/cursor.rb', line 93 def self.finalize(cursor_id, cluster, op_spec, server, session) proc do cluster.schedule_kill_cursor(cursor_id, op_spec, server) session.end_session if session && session.implicit? end end |
Instance Method Details
#batch_size ⇒ Integer
Get the batch size.
178 179 180 |
# File 'lib/mongo/cursor.rb', line 178 def batch_size @view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit end |
#closed? ⇒ true, false
Is the cursor closed?
190 191 192 |
# File 'lib/mongo/cursor.rb', line 190 def closed? !more? end |
#collection_name ⇒ String
Get the parsed collection name.
202 203 204 |
# File 'lib/mongo/cursor.rb', line 202 def collection_name @coll_name || collection.name end |
#each ⇒ Enumerator
Iterate through documents returned from the query.
122 123 124 125 126 127 128 |
# File 'lib/mongo/cursor.rb', line 122 def each process(@initial_result).each { |doc| yield doc } while more? return kill_cursors if exhausted? get_more.each { |doc| yield doc } end end |
#id ⇒ Integer
A cursor id of 0 means the cursor was closed on the server.
Get the cursor id.
216 217 218 |
# File 'lib/mongo/cursor.rb', line 216 def id @cursor_id end |
#inspect ⇒ String
Get a human-readable string representation of Cursor
.
108 109 110 |
# File 'lib/mongo/cursor.rb', line 108 def inspect "#<Mongo::Cursor:0x#{object_id} @view=#{@view.inspect}>" end |
#to_return ⇒ Integer
Get the number of documents to return. Used on 3.0 and lower server versions.
229 230 231 |
# File 'lib/mongo/cursor.rb', line 229 def to_return use_limit? ? @remaining : (batch_size || 0) end |
#try_next ⇒ BSON::Document | nil
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method is experimental and subject to change.
Return one document from the query, if one is available.
Retries once on a resumable error.
This method will wait up to max_await_time_ms milliseconds for changes from the server, and if no changes are received it will return nil.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/mongo/cursor.rb', line 142 def try_next if @documents.nil? @documents = process(@initial_result) # the documents here can be an empty array, hence # we may end up issuing a getMore in the first try_next call end if @documents.empty? if more? if exhausted? kill_cursors return nil end @documents = get_more end else # cursor is closed here # keep documents as an empty array end if @documents return @documents.shift end nil end |