Map-Reduce

Map-reduce is a data processing paradigm for condensing large volumesof data into useful aggregated results. For map-reduce operations,MongoDB provides the mapReduce database command.

Note

Starting in version 4.2, MongoDB deprecates:

  • The map-reduce option to create a new sharded collection as wellas the use of the sharded option formap-reduce. To output to a sharded collection, create the shardedcollection first. MongoDB 4.2 also deprecates the replacement ofan existing sharded collection.
  • The explicit specification of nonAtomic: false option.

Consider the following map-reduce operation:

Diagram of the annotated map-reduce operation.

In this map-reduce operation, MongoDB applies the map phase to eachinput document (i.e. the documents in the collection that match thequery condition). The map function emits key-value pairs. For thosekeys that have multiple values, MongoDB applies the reduce phase, whichcollects and condenses the aggregated data. MongoDB then stores the resultsin a collection. Optionally, the output of the reduce function maypass through a finalize function to further condense or process theresults of the aggregation.

All map-reduce functions in MongoDB are JavaScript and runwithin the mongod process. Map-reduce operations take thedocuments of a single collection as the input and can performany arbitrary sorting and limiting before beginning the map stage.mapReduce can return the results of a map-reduce operationas a document, or may write the results to collections.

Note

For most aggregation operations, theAggregation Pipeline provides better performance andmore coherent interface. However, map-reduce operations providesome flexibility that is not presently available in the aggregationpipeline.

Map-Reduce JavaScript Functions

In MongoDB, map-reduce operations use custom JavaScript functions tomap, or associate, values to a key. If a key has multiple valuesmapped to it, the operation reduces the values for the key to asingle object.

The use of custom JavaScript functions provide flexibility tomap-reduce operations. For instance, when processing a document, themap function can create more than one key and value mapping or nomapping. Map-reduce operations can also use a custom JavaScriptfunction to make final modifications to the results at the end of themap and reduce operation, such as perform additional calculations.

Starting in version 4.2.1, MongoDB deprecates the use of JavaScriptwith scope (i.e. BSON type 15) for themap, reduce, and finalize functions. To scope variables,use the scope parameter instead.

Map-Reduce Results

In MongoDB, the map-reduce operation can write results to a collectionor return the results inline. If you write map-reduce output to acollection, you can perform subsequent map-reduce operations on thesame input collection that merge replace, merge, or reduce new resultswith previous results. See mapReduce andPerform Incremental Map-Reduce for details andexamples.

When returning the results of a map-reduce operation inline, theresult documents must be within the BSON Document Size limit,which is currently 16 megabytes. For additional information on limitsand restrictions on map-reduce operations, see themapReduce reference page.

Sharded Collections

MongoDB supports map-reduce operations on sharded collections.

However, starting in version 4.2, MongoDB deprecates the map-reduceoption to create a new sharded collection and the use of thesharded option for map-reduce. To output to a sharded collection,create the sharded collection first. MongoDB 4.2 also deprecates thereplacement of an existing sharded collection.

See Map-Reduce and Sharded Collections.

Views

Views do not support map-reduce operations.