mongodb映射减少输出加倍

mongodb映射减少输出加倍,mongodb,mapreduce,Mongodb,Mapreduce,我的源数据库包含如下文档 {date:14, month:1, year:2011, name:"abc", item:"A"} {date:14, month:1, year:2011, name:"abc", item:"B"} {date:14, month:1, year:2011, name:"def", item:"A"} {date:14, month:1, year:2011, name:"def", item:"B"} {date:15, month:1, year:2011,

我的源数据库包含如下文档

{date:14, month:1, year:2011, name:"abc", item:"A"}
{date:14, month:1, year:2011, name:"abc", item:"B"}
{date:14, month:1, year:2011, name:"def", item:"A"}
{date:14, month:1, year:2011, name:"def", item:"B"}
{date:15, month:1, year:2011, name:"abc", item:"A"}
{date:16, month:1, year:2011, name:"abc", item:"A"}
{date:15, month:1, year:2011, name:"def", item:"A"}
{date:16, month:1, year:2011, name:"def", item:"A"}
我的地图是这样的

var m = function(){    
            emit({name:this.name, date:this.date, month:this.month, year:this.year},        {count:1})
        }
var r = function(key, values) {
        var total_count = 0;
        values.forEach(function(doc) {
            total_count += doc.count;
            });
    return {count:total_count};
};

var res = db.source.mapReduce(m, r, { out : { "merge" : "bb_import_trend" } } );
所以“myoutput”集合的计数如下

{ "_id" : { date : 14,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 14,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 15,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 15,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
}
因此,共有6份文件

所以当她17号的三份文件

{date:17, month:1, year:2011, name:"abc", item:"A"}
{date:17, month:1, year:2011, name:"abc", item:"B"}
{date:17, month:1, year:2011, name:"def", item:"A"}
已添加到我的源代码集中…我再次运行map reduce,它应该是两个文档的JU添加,如

前6名及以上

...
{ "_id" : { date : 17,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 17,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
}
但与此相反,它复制了之前的6个文档,并添加了另外2个新文档。因此,在我的输出集合中总共有14个文档(尽管我在输出中使用了merge)


注>:当我使用另一个具有相同源集合的数据库并执行相同的过程时,它会提供所需的输出(仅8个集合)。但我的gui使用的数据库仍在复制旧数据库。

您使用的
emit()
键是什么?你能给我看一下你的map reduce代码和一些示例文档吗?@dcrosta:请帮我修改我的问题,并给出完整的解释..对我来说似乎很好。。。使用第二个map reduce,它在合并后正确地返回8个文档。@Nat:是的,你绝对正确。我有两个具有相同源集合的diff dbs。其中一个由我的php GUI使用,它给出错误的输出,另一个给我所需的输出。我不确定我是否遵循。为什么有两个数据库?你能调用正确的map reduce作业吗?它是否在其中一个上提供了不正确的输出,而在另一个上没有?