我正在测试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函数实际上在做什么。它以某种方式组合了每个唯一键的值。