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