MongoDB的map / reduce的输出包括'counts': {'input': I, 'emit': E, 'output': O}
之类的内容。我以为我清楚地明白了那些意思,直到我遇到一个我无法解释的奇怪案例。
根据我的理解,counts.input
是与条件匹配的行数(在query
中指定)。如果是这样,以下两个查询如何可能有不同的结果?
db.mycollection.find({MY_CONDITION}).count()
db.mycollection.mapReduce(SOME_MAP, SOME_REDUCE, {'query': {MY_CONDITION}}).counts.input
我认为只要使用相同的条件,两者应该总是给出相同的结果,独立于map和reduce函数。
答案 0 :(得分:3)
map / reduce模式就像SQL中的组函数。因此,在一行中对某些结果进行分组。所以你的结果不能相同。
mapReduce()方法中的计数是map / reduce函数之后的结果数。
以身作则。你有两行:
{'id':3,'num':5}
{'id':4,'num':5}
并应用地图功能
function(){
emit(this.num, 1);
}
在此地图功能之后,您将获得2行:
{5, 1}
{5, 1}
现在你应用你的reduce方法:
function(k,vals) {
var sum=0;
for(var i in vals) sum += vals[i];
return sum;
}
现在只有1行返回:
2
答案 1 :(得分:0)
您的服务器在两次通话之间是否处于稳定状态?