我有一个数据结构可以跟踪不同城市的人:
//in db.persons
{
name: "John",
city: "Seattle
},
{
name: "Bill",
city: "Portland"
}
我想运行一个 map reduce 来获取每个城市有多少人的列表,所以结果将如下所示:
{
_id: "Seattle",
value: 10
}
我的 map reduce 函数如下所示:
map = function(){
var city = this.city
emit(city, 1);
};
reduce = function(key, values){
var result = 0;
values.forEach(function(value){
result += 1;
});
return result;
}
非常简单的东西,我想它会以city
为键,然后为它找到的每个匹配城市添加一个到结果中。但是,在生成的 map reduce 中,该值相差很大。将我的 reduce 功能切换为:
reduce = function(key, values){
var result = 0;
values.forEach(function(value){
result += value;
});
return result;
}
并将结果添加value
到结果(应该是 1,正如我从我的emit
函数中理解的那样)返回了正确的结果。
为什么结果不一样?value
在 reduce 函数中我不是 1 吗?