MongoDB mapReduce映射器函​​数

时间:2014-10-06 08:35:23

标签: mongodb

在此映射器函数中:

var mapper = function()
{
emit(this.gender,1)
}

1表示什么?

2 个答案:

答案 0 :(得分:0)

它会将1(值)添加到键gender

在reduce函数中,你可以总结一下。

示例:

地图:

male x 1
male x 1
female x 1
         ^---- this is the "1" you ask for

减少

male x2 (sums "male x 1" + "male x 1")
female x1

答案 1 :(得分:0)

MapReduce是一种递归机制,然后您需要在递归中使用基础。

例如,如果您有这些数据:

{"name" : "Tim",     "country" : "USA",      "age" : 15}
{"name" : "Sandra",  "country" : "USA",      "age" : 18}
{"name" : "Alex",    "country" : "France",   "age" : 19}
{"name" : "Zhong",   "country" : "Taiwan",   "age" : 19}
{"name" : "Tom",     "country" : "USA",      "age" : 20}
{"name" : "Marc",    "country" : "France",   "age" : 20}
{"name" : "Hao",     "country" : "Taiwan",   "age" : 12}
{"name" : "Jennifer","country" : "USA",      "age" : 15}
{"name" : "Jean",    "country" : "France",   "age" : 17}
{"name" : "James",   "country" : "USA",      "age" : 17}
{"name" : "Peter",   "country" : "USA",      "age" : 20}
{"name" : "Jorge",   "country" : "Portugal", "age" : 20}

如果您想知道按年龄划分的统计数据,可以应用此mapReduce函数:

function(){
    return db.Data.mapReduce(

            // Fonction MAP
            function(){
                emit(this.age,{count:1});
            },

            // Fonction REDUCE
            function(key,values){
                var reduced = {count:0};
                values.forEach(function(val) {
                    reduced.count+=val.count;
                });
                return reduced;
            },

            // Configurations
            {
                out : 'Stats'
            });
}

此图解释了在此过程中理论上会发生什么,emit函数将值设置为递归的基础: Sample for the execution of a MapReduce Job