在本页面
该reduce
函数是JavaScript函数,它在map-reduce操作期间将与特定键关联的所有值“还原”到单个对象
。该reduce
功能必须满足各种要求。本教程有助于验证该
reduce
功能满足以下条件:
reduce
函数必须返回一个对象,该对象的类型必须
与value
该map
函数所发出的类型相同。valuesArray
不应影响reduce
函数的输出。reduce
函数必须是幂等的。有关该reduce
功能的所有要求的列表,请参见
mapReduce
或mongo
shell 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
返回的相同结果: