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
Cursorobject. -
#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 |
# 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 ObjectSpace.define_finalizer(self, self.class.finalize(result.cursor_id, cluster, kill_cursors_op_spec, server, @session)) 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.
91 92 93 94 95 96 |
# File 'lib/mongo/cursor.rb', line 91 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.
176 177 178 |
# File 'lib/mongo/cursor.rb', line 176 def batch_size @view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit end |
#closed? ⇒ true, false
Is the cursor closed?
188 189 190 |
# File 'lib/mongo/cursor.rb', line 188 def closed? !more? end |
#collection_name ⇒ String
Get the parsed collection name.
200 201 202 |
# File 'lib/mongo/cursor.rb', line 200 def collection_name @coll_name || collection.name end |
#each ⇒ Enumerator
Iterate through documents returned from the query.
120 121 122 123 124 125 126 |
# File 'lib/mongo/cursor.rb', line 120 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.
214 215 216 |
# File 'lib/mongo/cursor.rb', line 214 def id @cursor_id end |
#inspect ⇒ String
Get a human-readable string representation of Cursor.
106 107 108 |
# File 'lib/mongo/cursor.rb', line 106 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.
227 228 229 |
# File 'lib/mongo/cursor.rb', line 227 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.
140 141 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 |
# File 'lib/mongo/cursor.rb', line 140 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 |