0

我正在MongoDB(c#驱动程序)中实现一个简单的“获取最大值”映射减少。对于我的测试,我的集合中有 10 项 int _id = 1 到 10。

我的map和reduce如下:

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,奇怪!

我认为地图正在输出一个字符串,因此比较没有按预期工作。任何帮助都会很棒

4

1 回答 1

1

如果值仅包含一项,则 Reduce 函数将不会运行。如果所有 id 都是唯一的,并且您在地图中的键只是那个 id,那么由于设计问题(为了提高性能),reduce 阶段将无法工作。如果你需要改变你的reduce输出的格式,你应该使用finalizemethod. 或者只是看看aggregation framework它提供了非常有用的工具来处理数据。

检查jira

jira.mongodb.org/browse/SERVER-5818

如果您只是想熟悉 map reduce,我建议您尝试使用 map-reduce 真正有意义的不同场景

干杯

于 2013-01-29T09:22:53.423 回答