我有两个系列:
我在这里使用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 ....
有谁能告诉我为什么仅在分片中出现此问题? 我需要做些什么来解决这个问题?