module Mongo::Collection::View::Iterable

Defines iteration related behavior for collection views, including cursor instantiation.

@since 2.0.0

Public Instance Methods

close_query() click to toggle source

Stop the iteration by sending a KillCursors command to the server.

@example Stop the iteration.

view.close_query

@since 2.1.0

# File lib/mongo/collection/view/iterable.rb, line 64
def close_query
  @cursor.send(:kill_cursors) if @cursor && !@cursor.closed?
end
Also aliased as: kill_cursors
each() { |doc| ... } click to toggle source

Iterate through documents returned by a query with this View.

@example Iterate through the result of the view.

view.each do |document|
  p document
end

@return [ Enumerator ] The enumerator.

@since 2.0.0

@yieldparam [ Hash ] Each matching document.

# File lib/mongo/collection/view/iterable.rb, line 37
def each
  @cursor = nil
  session = client.send(:get_session, @options)
  @cursor = if respond_to?(:write?, true) && write?
    server = server_selector.select_server(cluster, nil, session)
    result = send_initial_query(server, session)
    Cursor.new(view, result, server, session: session)
  else
    read_with_retry_cursor(session, server_selector, view) do |server|
      send_initial_query(server, session)
    end
  end
  if block_given?
    @cursor.each do |doc|
      yield doc
    end
  else
    @cursor.to_enum
  end
end
kill_cursors()
Alias for: close_query

Private Instance Methods

initial_command_op(session) click to toggle source
# File lib/mongo/collection/view/iterable.rb, line 79
def initial_command_op(session)
  if explained?
    Operation::Explain.new(Builder::FindCommand.new(self, session).explain_specification)
  else
    Operation::Find.new(Builder::FindCommand.new(self, session).specification)
  end
end
initial_query_op(server, session) click to toggle source
# File lib/mongo/collection/view/iterable.rb, line 71
def initial_query_op(server, session)
  if server.features.find_command_enabled?
    initial_command_op(session)
  else
    Operation::Find.new(Builder::OpQuery.new(self).specification)
  end
end
send_initial_query(server, session = nil) click to toggle source
# File lib/mongo/collection/view/iterable.rb, line 87
def send_initial_query(server, session = nil)
  validate_collation!(server, collation)
  initial_query_op(server, session).execute(server)
end