0

我打破了对mapreduce的理解。所以,我请你帮忙。

我有这样的实体:

public class ConstraintSpec
{
    [BsonId]
    public int Id { get; set; }
    public bool OrderRequired { get; set; }
    public ActionTypeConstraintSpec[] ActionTypeConstraintSpecs { get; set; }
}

我正在尝试编写我的 id 生成器。

这是我的“不工作” MapReduce js 代码:

Map = "map = function () {" +
              "emit(this._id)}";

        Reduce = "reduce = function (key, values) {" +
                     "var max = this[0];" +
                     "var len = this.length;" +
                     "for (var i = 1; i < len; i++) if (this[i] > max) max = this[i];" +
                     "return max;" +
                 "}";

然后我写:

var mapreduce = cont.MapReduce(Map, Reduce);
        var x = mapreduce.GetResults();

但没有任何效果。

请帮忙!

4

1 回答 1

1

你想用 map reduce 来完成什么,你需要为哪个字段找到最大值?在您的地图函数中,您需要发出您尝试聚合/比较的值;您目前只发出一个密钥 this.id。大概 _id 对于每个文档都是唯一的,这将阻止调用 reduce 函数(如果为特定键发出单个文档,则不会调用 reduce)。键必须是要聚合数据的字段的名称。

例如,在外壳中:

输入数据:

{_id: 1, name: "test1", number: 5}
{_id: 2, name: "test1", number: 8}
{_id: 3, name: "test2", number: 3}
{_id: 4, name: "test2", number: 11}

地图功能:

function () {
    emit{this.name, this.number}
}

减少功能:

    function(key, values) {
        var max = 0;
        values.forEach(function(value) {
           if(value > max){
              max = value;
           }
        });
        return max;
    }

输出数据:

{_id: "test1", value: 8}
{_id: "test2", value: 11}
于 2012-06-14T18:07:39.143 回答