- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
排除 Reduce Function 问题
排除 Reduce Function 问题
在本页面
reduce
function 是一个 JavaScript function,它在map-reduce操作期间“减少”到单个 object 与特定 key 关联的所有值。 reduce
function 必须满足各种要求。本教程有助于验证reduce
function 是否符合以下条件:
reduce
function 必须_retject 一个 object,其类型必须与map
function 发出的value
的类型相同。valuesArray
中元素的 order 不应影响reduce
function 的输出。reduce
function 必须是幂等的。
有关reduce
function 的所有要求的列表,请参阅MapReduce或mongo shell 辅助方法db.collection.mapReduce()。
确认输出类型
您可以测试reduce
function 返回的 value 与map
function 发出的 value 的类型相同。
- 定义一个
reduceFunction1
function,它接受 argumentskeyCustId
和valuesPrices
。valuesPrices
是整数的 array:
var reduceFunction1 = function(keyCustId, valuesPrices) {
return Array.sum(valuesPrices);
};
- 定义 sample array 整数:
var myTestValues = [ 5, 5, 10 ];
- 使用
myTestValues
调用reduceFunction1
:
reduceFunction1('myKey', myTestValues);
- 验证
reduceFunction1
返回 integer:
20
- 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文档:
var reduceFunction2 = function(keySKU, valuesCountObjects) {
reducedValue = { count: 0, qty: 0 };
for (var idx = 0; idx <; valuesCountObjects.length; idx++) {
reducedValue.count += valuesCountObjects[idx].count;
reducedValue.qty += valuesCountObjects[idx].qty;
}
return reducedValue;
};
- 定义 sample array 文档:
var myTestObjects = [
{ count: 1, qty: 5 },
{ count: 2, qty: 10 },
{ count: 3, qty: 15 }
];
- 使用
myTestObjects
调用reduceFunction2
:
reduceFunction2('myKey', myTestObjects);
- 验证
reduceFunction2
返回的文档中包含count
和qty
字段:
{ "count" : 6, "qty" : 30 }
确保对映射值的 Order 不敏感
reduce
function 以key
和values
array 为参数。您可以测试reduce
function 的结果不依赖于values
array 中元素的 order。
- 定义 sample
values1
array 和 samplevalues2
array,它们只在 array 元素的 order 中有所不同:
var values1 = [
{ count: 1, qty: 5 },
{ count: 2, qty: 10 },
{ count: 3, qty: 15 }
];
var values2 = [
{ count: 3, qty: 15 },
{ count: 1, qty: 5 },
{ count: 2, qty: 10 }
];
- 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文档:
var reduceFunction2 = function(keySKU, valuesCountObjects) {
reducedValue = { count: 0, qty: 0 };
for (var idx = 0; idx < valuesCountObjects.length; idx++) {
reducedValue.count += valuesCountObjects[idx].count;
reducedValue.qty += valuesCountObjects[idx].qty;
}
return reducedValue;
};
- 先使用
values1
然后使用values2
调用reduceFunction2
:
reduceFunction2('myKey', values1);
reduceFunction2('myKey', values2);
- 验证
reduceFunction2
返回相同的结果:
{ "count" : 6, "qty" : 30 }
确保减少 Function Idempotence
因为 map-reduce 操作可能会为同一个 key 多次调用reduce
,并且不会为工作集中的 key 的单个实例调用reduce
,reduce
function 必须 return 与从该值发出的 value 相同类型的 value。 map
function。您可以测试reduce
function process“减少”值而不影响最终的 value。
- 定义一个
reduceFunction2
function,它接受 argumentskeySKU
和valuesCountObjects
。valuesCountObjects
是包含两个字段count
和qty
的 array 文档:
var reduceFunction2 = function(keySKU, valuesCountObjects) {
reducedValue = { count: 0, qty: 0 };
for (var idx = 0; idx <; valuesCountObjects.length; idx++) {
reducedValue.count += valuesCountObjects[idx].count;
reducedValue.qty += valuesCountObjects[idx].qty;
}
return reducedValue;
};
- 定义 sample key:
var myKey = 'myKey';
- 定义 sample
valuesIdempotent
array,其中包含一个调用reduceFunction2
function 的元素:
var valuesIdempotent = [
{ count: 1, qty: 5 },
{ count: 2, qty: 10 },
reduceFunction2(myKey, [ { count:3, qty: 15 } ] )
];
- 定义一个 sample
values1
array,它结合了传递给reduceFunction2
的值:
var values1 = [
{ count: 1, qty: 5 },
{ count: 2, qty: 10 },
{ count: 3, qty: 15 }
];
- 首先使用
myKey
和valuesIdempotent
调用reduceFunction2
,然后使用myKey
和values1
调用reduceFunction2
:
reduceFunction2(myKey, valuesIdempotent);
reduceFunction2(myKey, values1);
- 验证
reduceFunction2
返回相同的结果:
{ "count" : 6, "qty" : 30 }
译者:李冠飞
校对:
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05