Mongodb Mapreduce的意外行为

时间:2013-04-27 22:14:02

标签: mongodb map mapreduce reduce

我正在测试mapreduce函数,但我有意想不到的行为:

我用这个简单的循环填充了我的收藏:

for (i=0; i<10000; i++) {db.coll.insert({'a':1,'b':2})}

所以我想用相同的'a'值计算文件(这是一个测试:-)) 我的地图功能是

map = "function() {  emit(this.a,this.b);}"

和reduce是:

reduce = "function (key,values) {return values.length;}"

呼叫     db.coll.mapReduce(map,reduce,{out:{inline:1}})

预期值为10000个文档且具有相同的“a”,这没关系?

但结果是:

db.coll.mapReduce(map, reduce, {out:{inline:1}})
{
    "results" : [
            {
                    "_id" : 1,
                    "value" : 101
            }
    ],
    "timeMillis" : 892,
    "counts" : {
            "input" : 10000,
            "emit" : 10000,
            "reduce" : 100,
            "output" : 1
    },
    "ok" : 1,
}

问题在哪里?为什么价值是101?减少计数结果的含义是什么? 帮我!在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

这个结果非常令人期待,因为你的reduce函数实际上没有做任何减少。

看看一些基本的map-reduce示例HERE,看看reduce函数实际上在做什么。它以某种方式组合每个唯一键的值。你的reduce函数没有这样做。