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
- OUT_ACTIONS
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: query_database, read: read, session: options[:session] } 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 97 def query_specification { selector: {}, options: {}, db_name: query_database, 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 109 def specification spec = { selector: map_reduce_command, db_name: database.name, read: read, session: options[:session] } write?(spec) ? spec.merge!(write_concern: write_concern) : spec end
Private Instance Methods
# File lib/mongo/collection/view/builder/map_reduce.rb, line 130 def find_command BSON::Document.new('find' => query_collection, 'filter' => {}) end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 134 def map_reduce_command command = BSON::Document.new( :mapReduce => collection.name, :map => map, :reduce => reduce, :query => filter, :out => { inline: 1 } ) if collection.read_concern command[:readConcern] = Options::Mapper.transform_values_to_strings( collection.read_concern) end command.merge!(view_options) command.merge!(Options::Mapper.transform_documents(options, MAPPINGS)) command end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 155 def query_collection if options[:out].respond_to?(:keys) options[:out][OUT_ACTIONS.find { |action| options[:out][action] }] end || options[:out] end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 151 def query_database options[:out].respond_to?(:keys) && options[:out][:db] ? options[:out][:db] : database.name end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 161 def view_options @view_options ||= (opts = view.options.dup opts.delete(:session) opts) end
# File lib/mongo/collection/view/builder/map_reduce.rb, line 123 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