lib/mongo/collection/view/map_reduce.rb in mongo-2.5.0.beta vs lib/mongo/collection/view/map_reduce.rb in mongo-2.5.0
- old
+ new
@@ -39,14 +39,14 @@
# @return [ View ] view The collection view.
attr_reader :view
# @return [ String ] map The map function.
- attr_reader :map
+ attr_reader :map_function
# @return [ String ] reduce The reduce function.
- attr_reader :reduce
+ attr_reader :reduce_function
# Delegate necessary operations to the view.
def_delegators :view, :collection, :read, :cluster
# Delegate necessary operations to the collection.
@@ -64,13 +64,14 @@
# @since 2.0.0
#
# @yieldparam [ Hash ] Each matching document.
def each
@cursor = nil
- session = client.send(:get_session, view.options)
- write_with_retry(session, Proc.new { server_selector.select_server(cluster, false) }) do |server|
+ session = client.send(:get_session, @options)
+ legacy_write_with_retry do |server|
result = send_initial_query(server, session)
+ result = send_fetch_query(server, session) unless inline?
@cursor = Cursor.new(view, result, server, session: session)
end
@cursor.each do |doc|
yield doc
end if block_given?
@@ -103,12 +104,12 @@
# @param [ Hash ] options The map/reduce options.
#
# @since 2.0.0
def initialize(view, map, reduce, options = {})
@view = view
- @map = map.freeze
- @reduce = reduce.freeze
+ @map_function = map.freeze
+ @reduce_function = reduce.freeze
@options = BSON::Document.new(options).freeze
end
# Set or get the jsMode flag for the operation.
#
@@ -178,26 +179,43 @@
# @since 2.0.5
def verbose(value = nil)
configure(:verbose, value)
end
+ # Execute the map reduce, without doing a fetch query to retrieve the results
+ # if outputted to a collection.
+ #
+ # @example Execute the map reduce and get the raw result.
+ # map_reduce.execute
+ #
+ # @return [ Mongo::Operation::Result ] The raw map reduce result
+ #
+ # @since 2.5.0
+ def execute
+ view.send(:with_session, @options) do |session|
+ legacy_write_with_retry do |server|
+ send_initial_query(server, session)
+ end
+ end
+ end
+
private
def server_selector
@view.send(:server_selector)
end
def inline?
out.nil? || out == { inline: 1 } || out == { INLINE => 1 }
end
- def map_reduce_spec(session)
- Builder::MapReduce.new(map, reduce, view, options.merge(session: session)).specification
+ def map_reduce_spec(session = nil)
+ Builder::MapReduce.new(map_function, reduce_function, view, options.merge(session: session)).specification
end
def new(options)
- MapReduce.new(view, map, reduce, options)
+ MapReduce.new(view, map_function, reduce_function, options)
end
def initial_query_op(session)
Operation::Commands::MapReduce.new(map_reduce_spec(session))
end
@@ -214,19 +232,18 @@
unless valid_server?(server)
log_warn(REROUTE)
server = cluster.next_primary(false)
end
validate_collation!(server)
- result = initial_query_op(session).execute(server)
- inline? ? result : send_fetch_query(server, session)
+ initial_query_op(session).execute(server)
end
def fetch_query_spec
- Builder::MapReduce.new(map, reduce, view, options).query_specification
+ Builder::MapReduce.new(map_function, reduce_function, view, options).query_specification
end
def find_command_spec(session)
- Builder::MapReduce.new(map, reduce, view, options.merge(session: session)).command_specification
+ Builder::MapReduce.new(map_function, reduce_function, view, options.merge(session: session)).command_specification
end
def fetch_query_op(server, session)
if server.features.find_command_enabled?
Operation::Commands::Find.new(find_command_spec(session))