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
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