Javascript Mongodb MapReduce是否连接字符串?

Javascript Mongodb MapReduce是否连接字符串?,javascript,mongodb,mapreduce,Javascript,Mongodb,Mapreduce,我看到的所有MongoDB MapReduce示例都涉及计数/加法。我需要组合字符串,看起来MapReduce是这项工作的最佳工具。我有一个大型MongoDB集合,其格式如下: {name: userone, type: typeone} {name: usertwo, type: typetwo} {name: userthree, type: typeone} 每个名称只有一种类型,但名称不一定是唯一的。我希望最终得到一个集合,该集合以逗号分隔的列表或数组形式列出特定类型的所有名称,如下所

我看到的所有MongoDB MapReduce示例都涉及计数/加法。我需要组合字符串,看起来MapReduce是这项工作的最佳工具。我有一个大型MongoDB集合,其格式如下:

{name: userone, type: typeone}
{name: usertwo, type: typetwo}
{name: userthree, type: typeone}
每个名称只有一种类型,但名称不一定是唯一的。我希望最终得到一个集合,该集合以逗号分隔的列表或数组形式列出特定类型的所有名称,如下所示:

 {type: typeone, names: userone, usertwo}
 {type: typetwo, names: userthree}
我正试图使用MapReduce来实现这一点。当一个类型只有一个用户时,My函数正常工作。但是,当有多个用户时,“未定义”将存储在“名称”字段中

我不太擅长Javascript,我还在学习MongoDB,所以这可能是一个简单的数据类型或范围错误

这是我的map和reduce函数。他们怎么了

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;
}

在我看来,你正在尝试通过类型进行分组。如果是这样,您应该首先发送类型。从这里开始,它与您的代码几乎相同,但我冒昧地对其进行了一些清理

注意,reduce函数可能会在较小的组上被多次调用。因此,如果在分片环境中使用代码,可能会得到额外的尾随逗号。有关更多信息,请参阅

地图

m = function(){ emit(this.type, {names:this.name}); }
r = function(key, values){
  var all = [];
  values.forEach(function(x){
    all.push(x.names)
  })
  return {"names": all.join(", ")};
}
减少

m = function(){ emit(this.type, {names:this.name}); }
r = function(key, values){
  var all = [];
  values.forEach(function(x){
    all.push(x.names)
  })
  return {"names": all.join(", ")};
}
用法

res = db.users.mapReduce(m,r); db[res.result].find()
备选方案:

对于每个OP请求,以下是返回名称数组而不是逗号分隔的列表字符串的版本:

m = function () {
    emit(this.type, {names:this.name});
}

r = function (key, values) {
    var all = [];
    values.forEach(function (x) {all.push(x.names);});
    return {type:key, names:all};
}

f = function (w, r) {
    r.names = r.names[0];
    return r
}

res = db.users.mapReduce(m,r, {finalize:f}); db[res.result].find()

干杯

这很好…现在我如何修改代码,使其在数组中包含名称,而不是逗号分隔的列表(然后,如果需要,我可以在客户机上构建逗号分隔的列表)?简单地输入{“名称”:all};在map函数中,它可以工作,但是会得到一堆丑陋的嵌套数组,比如[0]=>Array([0]=>Array([0]=>Array([0]=>Array([0]=>Array)(啊…是的。我不确定你的意图是什么,所以我根据你的代码猜测。我将修改我的答案以包含一个数组示例。