在本页面
该reduce函数是JavaScript函数,它在map-reduce操作期间将与特定键关联的所有值“还原”到单个对象
。该reduce功能必须满足各种要求。本教程有助于验证该
reduce功能满足以下条件:
reduce函数必须返回一个对象,该对象的类型必须
与value该map
函数所发出的类型相同。valuesArray不应影响reduce函数的输出。reduce函数必须是幂等的。有关该reduce功能的所有要求的列表,请参见
mapReduce或mongoshell helper方法
db.collection.mapReduce()。
注意
在4.2.1版本开始,MongoDB的不赞成使用范围(即使用JavaScript的BSON类型15)的map,reduce和finalize功能。要限制变量的范围,请改用scope参数。
您可以测试该reduce函数返回的值与该map函数发出的值的类型相同。
定义一个reduceFunction1接受参数keyCustId和的函数
valuesPrices。valuesPrices是整数数组:
定义一个整数样本数组:
调用reduceFunction1具有myTestValues:
验证reduceFunction1返回的整数:
定义一个reduceFunction2接受参数keySKU和的函数
valuesCountObjects。valuesCountObjects是包含两个字段count和的文档数组qty:
定义文档样本数组:
调用reduceFunction2具有myTestObjects:
reduceFunction2使用count和qty字段验证返回的文档
:
该reduce函数以key和values数组作为参数。您可以测试reduce函数的结果是否不依赖于values数组中元素的顺序。
定义一个样本values1数组和一个样本values2数组,它们仅在数组元素的顺序上有所不同:
定义一个reduceFunction2接受参数keySKU和的函数
valuesCountObjects。valuesCountObjects是包含两个字段count和的文档数组qty:
reduceFunction2首先调用values1,然后使用
values2:
验证reduceFunction2返回的相同结果:
由于map-reduce操作可能会reduce多次调用同一键,而不会reduce为工作集中的单个键实例调用a ,因此该reduce函数必须返回与该map函数发出的值相同类型的值。您可以测试reduce函数处理了“减少”的值而不会影响最终值。
定义一个reduceFunction2接受参数keySKU和的函数
valuesCountObjects。valuesCountObjects是包含两个字段count和的文档数组qty:
定义一个样本键:
定义一个示例valuesIdempotent数组,其中包含一个元素,该元素是对该reduceFunction2函数的调用:
定义一个示例values1数组,该数组组合传递给的值
reduceFunction2:
reduceFunction2首先使用myKey和
调用valuesIdempotent,然后使用myKey和调用values1:
验证reduceFunction2返回的相同结果: