Mongodb 在mongo中,需要使用标识列连接两个集合,并从两个集合中发出所需的列

Mongodb 在mongo中,需要使用标识列连接两个集合,并从两个集合中发出所需的列,mongodb,mapreduce,Mongodb,Mapreduce,我有book和author集合。在此名称中,所写的和所写的是同一个值列。因此我尝试了以下脚本,但它只发出第一个映射值,而不发出第二个映射值 book = function() { emit(this.id, {name: this.name,editions:this.editions}); } author = function() { emit(this.id, {name:this.name,works_written: this.works_writtten,}); } r_b

我有book和author集合。在此名称中,所写的和所写的是同一个值列。因此我尝试了以下脚本,但它只发出第一个映射值,而不发出第二个映射值

book = function() {
emit(this.id, {name: this.name,editions:this.editions});
 }
author = function() {
emit(this.id, {name:this.name,works_written: this.works_writtten,});
 }


r_b = function(k, values) {
var result = {};
values.forEach(function(value) {
    var name;
    for (name in value) {
        if (value.hasOwnProperty(name)) {
             result[name] = value[name];
        }
    }
 });
 return result;
 };
 r_a = function(k, values) {
 var result = {};
 values.forEach(function(value) {
    var works_written;
    for (works_written in value) {
        if (value.hasOwnProperty(works_written)) {
            result[works_written] = value[works_written];
         }
     }
 });
 return result;
 };
  res = db.book.mapReduce(book, r_ja, {out: {reduce: 'joined'}})
  res = db.author.mapReduce(author, r_jp, {out: {reduce: 'joined'}})

有人能帮我吗?

看看你的代码,你似乎有两个收藏,“书”和“作者”。每本书的结构如下:

{
    id: <some id>,
    name: <some name>,
    editions: <comma-separated string of editions>
}
{
    id: <some id>,
    name: <some name>,
    works_written: <comma-separated string of works written>
}
{
id:,
姓名:,
版本:
}
每个作者的结构如下:

{
    id: <some id>,
    name: <some name>,
    editions: <comma-separated string of editions>
}
{
    id: <some id>,
    name: <some name>,
    works_written: <comma-separated string of works written>
}
{
id:,
姓名:,
作品:
}
更合理的做法是将编写的作品和版本存储为数组,而不是将每个列表打包成单个字符串。这将使遍历数组成为可能

此外,您是否为每个作者和每本书提供了多个文档?如果没有,您就不需要mapreduce来完成您正在尝试做的事情-一个简单的find()应该可以工作


万一我误解了,你到底想做什么?

join works.but我在works_writed中有逗号分隔的值。我该怎么做。我以前计算的拆分函数是:map=function(){if(this.works_writed!=null){var array=this.works_writed.split(',');emit(this.works_writed,array.length)}reduce=function(key,values){return values[0];}result=db.runCommand({“mapreduce”:“author”,“map”:map,“reduce”:reduce,“out”:“split_result”});您能否将此作为完整脚本发布。无需在版本中执行任何操作。只需对[book]进行命名并编写(author)[csv数据]要在书中显示名称和版本栏,在作者中显示名称栏,请提供帮助。