Class: Mongo::CachingCursor
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Cursor ,
Forwardable
|
|
Instance Chain:
|
|
Inherits: |
Mongo::Cursor
|
Defined in: | lib/mongo/caching_cursor.rb |
Overview
A Cursor that attempts to load documents from memory first before hitting the database if the same query has already been executed.
Class Method Summary
Cursor
- Inherited
Instance Attribute Summary
- #cached_docs ⇒ Array <BSON::Document> readonly Internal use only Internal use only
Cursor
- Inherited
#closed? | Is the cursor closed? |
#connection, #context, #fully_iterated?, #initial_result, | |
#resume_token | The resume token tracked by the cursor for change stream resuming. |
#server, #view, #exhausted?, #explicitly_closed?, #limited?, #use_limit? |
Instance Method Summary
-
#each
We iterate over the cached documents if they exist already in the cursor otherwise proceed as normal.
-
#inspect ⇒ String
Get a human-readable string representation of
Cursor
. -
#try_next
Internal use only
Internal use only
Acquires the next document for cursor iteration and then inserts that document in the @cached_docs array.
Cursor
- Inherited
#batch_size | Get the batch size. |
#close | Closes this cursor, freeing any associated resources on the client and the server. |
#collection_name | Get the parsed collection name. |
#each | Iterate through documents returned from the query. |
#get_more | Execute a getMore command and return the batch of documents obtained from the server. |
#id | Get the cursor id. |
#inspect | Get a human-readable string representation of |
#kill_spec, | |
#to_return | Get the number of documents to return. |
#try_next | Return one document from the query, if one is available. |
#batch_size_for_get_more, #cache_batch_resume_token, #cache_resume_token, | |
#check_in_connection | Returns the connection that was used to create the cursor back to the corresponding connection pool. |
#connection_global_id_for_context | Because a context must not have a connection_global_id if the session is already pinned to one, this method checks to see whether or not there’s pinned connection_global_id on the session and returns nil if so. |
#end_session, #execute_operation, | |
#fresh_context | Returns a newly instantiated operation context based on the default values from the view. |
#get_more_operation, #limit, | |
#possibly_refreshed_context | Considers the timeout mode and will either return the cursor’s context directly, or will return a new (refreshed) context. |
#process, #register, | |
#set_cursor_id | Sets @cursor_id from the operation result. |
#unregister |
Retryable
- Included
#read_worker | Returns the read worker for handling retryable reads. |
#select_server | This is a separate method to make it possible for the test suite to assert that server selection is performed during retry attempts. |
#write_worker | Returns the write worker for handling retryable writes. |
Instance Attribute Details
#cached_docs ⇒ Array
<BSON::Document
> (readonly)
# File 'lib/mongo/caching_cursor.rb', line 28
attr_reader :cached_docs
Instance Method Details
#each
We iterate over the cached documents if they exist already in the cursor otherwise proceed as normal.
# File 'lib/mongo/caching_cursor.rb', line 37
def each if @cached_docs @cached_docs.each do |doc| yield doc end unless closed? # StopIteration raised by try_next ends this loop. loop do document = try_next yield document if document end end else super end end
#inspect ⇒ String
Get a human-readable string representation of Cursor
.
# File 'lib/mongo/caching_cursor.rb', line 61
def inspect "#<Mongo::CachingCursor:0x#{object_id} @view=#{@view.inspect}>" end
#try_next
Acquires the next document for cursor iteration and then inserts that document in the @cached_docs array.
# File 'lib/mongo/caching_cursor.rb', line 69
def try_next @cached_docs ||= [] document = super @cached_docs << document if document document end