Mongodb Mapreduce的意外行为



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

我用这个简单的for循环填充我的集合:

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

所以我想计算具有相同'a'值的文档(这是一个测试:-))我的map函数是

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

和reduce是:

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

调用db.coll。mapReduce(map, reduce, {out:{inline:1}})

期望的值是10000 docs与相同的'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?在结果中减少计数是什么意思?帮帮我!提前感谢!!

这个结果是非常预期的,因为您的reduce函数实际上没有做任何减少。

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

相关内容

  • 没有找到相关文章

最新更新