Class: Mongoid::Contextual::MapReduce

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable, Command
Defined in:
build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb

Instance Attribute Summary

Attributes included from Command

#collection, #collection The collection to query against., #criteria, #criteria The criteria for the context.

Instance Method Summary collapse

Methods included from Command

#client

Constructor Details

#initialize(collection, criteria, map, reduce) ⇒ MapReduce

Initialize the new map/reduce directive.

Examples:

Initialize the new map/reduce.

MapReduce.new(criteria, map, reduce)

Parameters:

  • criteria (Criteria)

    The Mongoid criteria.

  • map (String)

    The map js function.

  • reduce (String)

    The reduce js function.

Since:

  • 3.0.0



85
86
87
88
89
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 85

def initialize(collection, criteria, map, reduce)
  @collection = collection
  @criteria = criteria
  @map_reduce = @criteria.view.map_reduce(map, reduce)
end

Instance Method Details

#commandObject



246
247
248
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 246

def command
  @map_reduce.send(:map_reduce_spec)[:selector]
end

#countsHash

Get all the counts returned by the map/reduce.

Examples:

Get the counts.

map_reduce.counts

Returns:

  • (Hash)

    The counts.

Since:

  • 3.0.0



22
23
24
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 22

def counts
  results["counts"]
end

#eachEnumerator

Iterates over each of the documents in the map/reduce, excluding the extra information that was passed back from the database.

Examples:

Iterate over the results.

map_reduce.each do |doc|
  p doc
end

Returns:

  • (Enumerator)

    The enumerator.

Since:

  • 3.0.0



37
38
39
40
41
42
43
44
45
46
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 37

def each
  validate_out!
  if block_given?
    @map_reduce.each do |doc|
      yield doc
    end
  else
    @map_reduce.to_enum
  end
end

#emittedInteger

Get the number of documents emitted by the map/reduce.

Examples:

Get the emitted document count.

map_reduce.emitted

Returns:

  • (Integer)

    The number of emitted documents.

Since:

  • 3.0.0



56
57
58
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 56

def emitted
  counts["emit"]
end

#finalize(function) ⇒ MapReduce

Provide a finalize js function for the map/reduce.

Examples:

Provide a finalize function.

map_reduce.finalize(func)

Parameters:

  • function (String)

    The finalize function.

Returns:

Since:

  • 3.0.0



70
71
72
73
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 70

def finalize(function)
  @map_reduce = @map_reduce.finalize(function)
  self
end

#inputInteger

Get the number of documents that were input into the map/reduce.

Examples:

Get the count of input documents.

map_reduce.input

Returns:

  • (Integer)

    The number of input documents.

Since:

  • 3.0.0



99
100
101
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 99

def input
  counts["input"]
end

#inspectString

Get a pretty string representation of the map/reduce, including the criteria, map, reduce, finalize, and out option.

Examples:

Inspect the map_reduce.

map_reduce.inspect

Returns:

  • (String)

    The inspection string.

Since:

  • 3.1.0



235
236
237
238
239
240
241
242
243
244
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 235

def inspect
%Q{#<Mongoid::Contextual::MapReduce
  selector: #{criteria.selector.inspect}
  class:    #{criteria.klass}
  map:      #{command[:map]}
  reduce:   #{command[:reduce]}
  finalize: #{command[:finalize]}
  out:      #{command[:out].inspect}>
}
end

#js_modeMapReduce

Sets the map/reduce to use jsMode.

Examples:

Set the map/reduce to jsMode.

map_reduce.js_mode

Returns:

Since:

  • 3.0.0



111
112
113
114
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 111

def js_mode
  @map_reduce = @map_reduce.js_mode(true)
  self
end

#out(location) ⇒ MapReduce

Specifies where the map/reduce output is to be stored. Please see MongoDB documentation for supported map reduce options.

Examples:

Store output in memory.

map_reduce.out(inline: 1)

Store output in a collection, replacing existing documents.

map_reduce.out(replace: "collection_name")

Store output in a collection, merging existing documents.

map_reduce.out(merge: "collection_name")

Store output in a collection, reducing existing documents.

map_reduce.out(reduce: "collection_name")

Return results from map reduce.

map_reduce.out(inline: 1)

Parameters:

  • location (Hash)

    The place to store the results.

Returns:

Since:

  • 3.0.0



139
140
141
142
143
144
145
146
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 139

def out(location)
  normalized = location.dup
  normalized.update_values do |value|
    value.is_a?(::Symbol) ? value.to_s : value
  end
  @map_reduce = @map_reduce.out(normalized)
  self
end

#outputInteger

Get the number of documents output by the map/reduce.

Examples:

Get the output document count.

map_reduce.output

Returns:

  • (Integer)

    The number of output documents.

Since:

  • 3.0.0



156
157
158
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 156

def output
  counts["output"]
end

#rawHash Also known as: results, execute

Get the raw output from the map/reduce operation.

Examples:

Get the raw output.

map_reduce.raw

Returns:

  • (Hash)

    The raw output.

Since:

  • 3.0.0



168
169
170
171
172
173
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 168

def raw
  validate_out!
  cmd = command
  opts = { read: cmd.delete(:read) } if cmd[:read]
  @map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
end

#reducedInteger

Get the number of documents reduced by the map/reduce.

Examples:

Get the reduced document count.

map_reduce.reduced

Returns:

  • (Integer)

    The number of reduced documents.

Since:

  • 3.0.0



195
196
197
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 195

def reduced
  counts["reduce"]
end

#scope(object) ⇒ MapReduce

Adds a javascript object to the global scope of the map/reduce.

Examples:

Add an object to the global scope.

map_reduce.scope(name: value)

Parameters:

  • object (Hash)

    A hash of key/values for the global scope.

Returns:

Since:

  • 3.0.0



209
210
211
212
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 209

def scope(object)
  @map_reduce = @map_reduce.scope(object)
  self
end

#timeFloat

Get the execution time of the map/reduce.

Examples:

Get the execution time.

map_reduce.time

Returns:

  • (Float)

    The time in milliseconds.

Since:

  • 3.0.0



222
223
224
# File 'build/mongoid-7.3/lib/mongoid/contextual/map_reduce.rb', line 222

def time
  results["timeMillis"]
end