我见过的所有MongoDB MapReduce示例都涉及到计数/添加数字。我需要组合字符串,它看起来像MapReduce是该作业的最佳工具。我有这种格式的大型MongoDB集合:Mongodb MapReduce连接字符串?
{name: userone, type: typeone}
{name: usertwo, type: typetwo}
{name: userthree, type: typeone}
每个名称只有一种类型,但名称不一定是唯一的。我想用一个集合列出所有的名字为特定类型的结束了,无论是在一个逗号分隔的列表或数组,像这样:
{type: typeone, names: userone, usertwo}
{type: typetwo, names: userthree}
我试图用MapReduce的做到这一点。当一个类型只有一个用户时,我的功能可以正常工作。但是,当有多个用户时,'未定义'被存储在名称字段中。
我不是很擅长Javascript,而且我还在学习MongoDB,所以它可能是一个简单的数据类型或范围错误。
这是我的地图和减少功能。他们怎么了?
map = function() {
emit(this.user,{type:this.type});
}
reduce = function(key, values) {
var all="";
for(var i in values) {
all+=values[i]['type']+",";
}
return all;
}
这很好,现在我该如何修改该代码,以便在数组中使用名称而不是逗号分隔列表(如果需要,我可以在客户端上构建逗号分隔列表)? 简单地回报{“names”:all}; (0)=> Array( [0] => Array( [0] => Array( [0] => Array( [0]))在映射函数中工作,但得到了一堆丑陋的嵌套数组, => Array( [0] => Array( – 2010-06-04 21:14:11
啊......是的,我不确定你的意图是什么,所以我根据你的代码猜到了,我会修改我的答案以包含一个数组示例。 – 2010-06-04 21:17:59