- Aggregation >
- Aggregation Examples >
- Troubleshoot the Reduce Function
Troubleshoot the Reduce Function¶
On this page
The reduce function is a JavaScript function that “reduces” to a
single object all the values associated with a particular key during a
map-reduce operation. The reduce function
must meet various requirements. This tutorial helps verify that the
reduce function meets the following criteria:
- The
reducefunction must return an object whose type must be identical to the type of thevalueemitted by themapfunction. - The order of the elements in the
valuesArrayshould not affect the output of thereducefunction. - The
reducefunction must be idempotent.
For a list of all the requirements for the reduce function, see
mapReduce, or the mongo shell helper method
db.collection.mapReduce().
Confirm Output Type¶
You can test that the reduce function returns a value that is the
same type as the value emitted from the map function.
Define a
reduceFunction1function that takes the argumentskeyCustIdandvaluesPrices.valuesPricesis an array of integers:Define a sample array of integers:
Invoke the
reduceFunction1withmyTestValues:Verify the
reduceFunction1returned an integer:Define a
reduceFunction2function that takes the argumentskeySKUandvaluesCountObjects.valuesCountObjectsis an array of documents that contain two fieldscountandqty:Define a sample array of documents:
Invoke the
reduceFunction2withmyTestObjects:Verify the
reduceFunction2returned a document with exactly thecountand theqtyfield:
Ensure Insensitivity to the Order of Mapped Values¶
The reduce function takes a key and a values array as its
argument. You can test that the result of the reduce function does
not depend on the order of the elements in the values array.
Define a sample
values1array and a samplevalues2array that only differ in the order of the array elements:Define a
reduceFunction2function that takes the argumentskeySKUandvaluesCountObjects.valuesCountObjectsis an array of documents that contain two fieldscountandqty:Invoke the
reduceFunction2first withvalues1and then withvalues2:Verify the
reduceFunction2returned the same result:
Ensure Reduce Function Idempotence¶
Because the map-reduce operation may call a reduce multiple times
for the same key, and won’t call a reduce for single instances
of a key in the working set, the reduce function must return a value of the
same type as the value emitted from the map function. You can test
that the reduce function process “reduced” values without
affecting the final value.
Define a
reduceFunction2function that takes the argumentskeySKUandvaluesCountObjects.valuesCountObjectsis an array of documents that contain two fieldscountandqty:Define a sample key:
Define a sample
valuesIdempotentarray that contains an element that is a call to thereduceFunction2function:Define a sample
values1array that combines the values passed toreduceFunction2:Invoke the
reduceFunction2first withmyKeyandvaluesIdempotentand then withmyKeyandvalues1:Verify the
reduceFunction2returned the same result: