我正在测试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?减少计数结果的含义是什么? 帮我!在此先感谢!!!
答案 0 :(得分:0)
这个结果非常令人期待,因为你的reduce函数实际上没有做任何减少。
看看一些基本的map-reduce示例HERE,看看reduce函数实际上在做什么。它以某种方式组合每个唯一键的值。你的reduce函数没有这样做。