具有2个集合的Mongodb MapReduce在分片中给出了重复的键错误

时间:2015-01-30 12:55:35

标签: mongodb

我有两个系列:

  1. MasterDetails
  2. 交易。
  3. 我在这里使用MapReduce建立一对多的关系。 我的代码适用于单个实例,但是当我在分片中运行相同的代码时,它会给出错误,例如无法插入重复的密钥'。

    谁能告诉我哪里错了?

    1)我在这里为MasterDetails集合创建地图:

    var mapMaster = function(){ var out = { PID:this.PID , LOCATIONS : this.LOCATIONS , STATUS : this.STATUS , COUNT :this.COUNT }; emit (this.CODE , out ); } 
    

    2)此地图适用于交易集合:

    var mapTrans = function(){ var out = {AMT : this.AMT , DATETIME : this.DATETIME , LNAME : this.LNAME , ACCTID :this.ACCTID };
    emit(this.CODE , out); }
    

    3)现在减少功能:

     reduce = function (k, values) { 
    var result = {} , 
    commentFields = { "PID" : '', "AMT" :'', "DATETIME" : '', "LNAME" : '' , "ACCID" : ''}; 
    values.forEach(function(value){ 
    var field;if("PID" in value) { if(!("records" in result)){ result.records = []; } result.records.push(value); } else if ("records" in value){ if(!("records" in result)){ result.records = []; } 
    result.records.push.apply(result.records, value.records); } 
    for (field in value) { if (value.hasOwnProperty(field) && !(field in commentFields)){ result[field] = value[field]; } } }); return result; }
    

    现在是时候在收集上应用MapReduce了 -

    db.test_collection.mapReduce(mapTrans , reduce , {out: {reduce:"rp_1", sharded: true }}); 
    

    此命令在分片中也可以正常工作,但是当我输入:

    db.test_collection.mapReduce(mapMaster , reduce , {out: {reduce:"rp_1", sharded: true }});
    

    它会导致重复键错误插入失败....这样的事情。 错误代码11000 ....

    有谁能告诉我为什么仅在分片中出现此问题? 我需要做些什么来解决这个问题?

0 个答案:

没有答案