我在MongoDB(c#driver)中实现了一个简单的'get max value'map reduce。 对于我的测试,我在集合中有10个项目,其中int _id = 1到10.
我的地图和缩小如下:
var map = "function() {emit('_id', this.Id);}";
var reduce = "function(key, values) {var max = 1; for (id in values) {if(id>max) {max=id;}} } return max;}";
当我跑步时,我得到结果9,奇怪!!
我认为地图正在输出一个字符串,因此比较不能按预期工作。 任何帮助都会很棒
答案 0 :(得分:1)
如果值只包含一个项目,则不会运行Reduce函数。如果所有ID都是唯一的,并且您在地图中的键只是该ID,则由于设计问题(用于提高性能),reduce阶段将不起作用。如果您需要更改reduce输出的格式,则应使用finalize
方法。或者只是看一下aggregation framework
,它提供了非常有用的数据播放工具。
检查jira
jira.mongodb.org/browse/SERVER-5818
如果您只是想熟悉map reduce,我建议您尝试使用map-reduce真正有意义的不同场景
干杯