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 63
def initialize(map, reduce, view, options)
  @map = map
  @reduce = reduce
  @view = view
  @options = options
end

Public Instance Methods

command_specification() click to toggle source

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 79
def command_specification
  { selector: find_command, db_name: database.name, read: read }
end
query_specification() click to toggle source

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 91
def query_specification
  { selector: {}, options: {}, db_name: database.name, coll_name: query_collection }
end
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 103
def specification
  { selector: map_reduce_command, db_name: database.name, read: read }
end

Private Instance Methods

find_command() click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 109
def find_command
  BSON::Document.new('find' => query_collection, 'filter' => {})
end
map_reduce_command() click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 113
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!(Options::Mapper.transform_documents(options, MAPPINGS))
  command.merge!(view.options)
  command
end
query_collection() click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 127
def query_collection
  options[:out].respond_to?(:keys) ? options[:out].values.first : options[:out]
end