class Mongo::Collection::View::Builder::MapReduce
Builds a map/reduce specification from the view and options.
@since 2.2.0
Constants
- MAPPINGS
The mappings from ruby options to the map/reduce options.
@since 2.2.0
Attributes
map[R]
@return [ String ] map The map function.
options[R]
@return [ Hash ] options The map/reduce specific options.
reduce[R]
@return [ String ] reduce The reduce function.
view[R]
@return [ Collection::View
] view The collection view.
Public Class Methods
new(map, reduce, view, options)
click to toggle source
Initialize the builder.
@example Initialize the builder.
MapReduce.new(map, reduce, view, options)
@param [ String ] map The map function. @param [ String ] reduce The reduce function. @param [ Collection::View
] view The collection view. @param [ Hash ] options The map/reduce options.
@since 2.2.0
# File lib/mongo/collection/view/builder/map_reduce.rb, line 67 def initialize(map, reduce, view, options) @map = map @reduce = reduce @view = view @options = options end
Public Instance Methods
specification()
click to toggle source
Get the specification to pass to the map/reduce operation.
@example Get the specification.
builder.specification
@return [ Hash ] The specification.
@since 2.2.0
# File lib/mongo/collection/view/builder/map_reduce.rb, line 82 def specification spec = { selector: map_reduce_command, db_name: database.name, # Note that selector just above may also have a read preference # specified, per the #map_reduce_command method below. read: read, session: options[:session] } write?(spec) ? spec.merge!(write_concern: write_concern) : spec end
Private Instance Methods
map_reduce_command()
click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 103 def map_reduce_command command = BSON::Document.new( :mapReduce => collection.name, :map => map, :reduce => reduce, :query => filter, :out => { inline: 1 }, ) # Shouldn't this use self.read ? if collection.read_concern command[:readConcern] = Options::Mapper.transform_values_to_strings( collection.read_concern) end command.update(view_options) command.update(Utils.slice_hash(options, :collation)) # Read preference isn't simply passed in the command payload # (it may need to be converted to wire protocol flags) # so remove it here and hopefully it's handled elsewhere. # If not, RUBY-2706. command.delete(:read) command.merge!(Options::Mapper.transform_documents(options, MAPPINGS)) command end
view_options()
click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 127 def view_options @view_options ||= (opts = view.options.dup opts.delete(:session) opts) end
write?(spec)
click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 96 def write?(spec) if out = spec[:selector][:out] out.is_a?(String) || (out.respond_to?(:keys) && out.keys.first.to_s.downcase != View::MapReduce::INLINE) end end