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 64
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 80
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 96
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 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

find_command() click to toggle source
# File lib/mongo/collection/view/builder/map_reduce.rb, line 126
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 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
query_collection() click to toggle source
# 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
write?(spec) click to toggle source
# 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