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
@return [ String ] map The map function.
@return [ Hash ] options The map/reduce specific options.
@return [ String ] reduce The reduce function.
@return [ Collection::View ] view The collection view.
Public Class Methods
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 64 def initialize(map, reduce, view, options) @map = map @reduce = reduce @view = view @options = options end
Public Instance Methods
Get the specification for issuing a find command on the map/reduce results.
@example Get the command specification.
builder.command_specification
@return [ Hash ] The specification.
@since 2.2.0
# File lib/mongo/collection/view/builder/map_reduce.rb, line 80 def command_specification { selector: find_command, db_name: database.name, read: read } end
Get the specification for the document query after a map/reduce.
@example Get the query specification.
builder.query_specification
@return [ Hash ] The specification.
@since 2.2.0
# File lib/mongo/collection/view/builder/map_reduce.rb, line 96 def query_specification { selector: {}, options: {}, db_name: database.name, coll_name: query_collection } end
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 108 def specification spec = { selector: map_reduce_command, db_name: database.name, read: read } write?(spec) ? spec.merge!(write_concern: write_concern) : spec end
Private Instance Methods
# File lib/mongo/collection/view/builder/map_reduce.rb, line 126 def find_command BSON::Document.new('find' => query_collection, 'filter' => {}) end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 130 def map_reduce_command command = BSON::Document.new( :mapreduce => collection.name, :map => map, :reduce => reduce, :query => filter, :out => { inline: 1 } ) command[:readConcern] = collection.read_concern if collection.read_concern command.merge!(view.options) command.merge!(Options::Mapper.transform_documents(options, MAPPINGS)) command end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 144 def query_collection options[:out].respond_to?(:keys) ? options[:out].values.first : options[:out] end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 119 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