2013-10-30 4 views
0

MapReduce 프로세스를 수행하고 이상한 결과가 나타납니다. 예상되는 결과는 : 내가 가진 무엇Odd MapReduce 출력

{ "_id" : {...}, "value" : { "register" : 1, "login" : 3, "payment" : 4.99, "transaction" : 1} } 

은 다음과 같습니다

{ "_id" : {...}, "value" : { "register" : 1, "login" : 6, "payment" : 4.99, "transaction" : 0, "transcation" : NaN } } 

모든 권리 "transcation"를 제외하고 보이는, 최초의 "거래": 0이되어야합니다 ... : 1, 두 번째 트랜잭션 : NaN이 없어야합니다.

모든 로그를 인쇄하지만 잘못을 찾지 못했습니다.

코드 :

exports.basic = function(){ 

    var map = function(){ 
     var key = { 
      app:this.properties.YA0token, 
      uuid:this.properties.distinct_id 
     } 
     var value = { 
      register:0, 
      login:0, 
      payment:0, 
      transaction:0 
     }; 


     if (this.event=='register') { 
      value.register = 1; 
     } else if (this.event=='login') { 
      value.login = 1; 
     } else if (this.event=='YA0charge') { 
      value.payment = this.properties.amount; 
      value.transaction = 1; 
      print(value.register,value.login,value.payment,value.transaction); 
     } 


     emit(key,value); 
    } 

    var reduce = function(key,values){ 
     var result = { 
      register:0, 
      login:0, 
      payment:0, 
      transaction:0 
     }; 
     print("values.length = ",values.length); 

     values.forEach(function(value){ 
      result.register += value.register; 
      result.login += value.login; 
      result.payment += value.payment; 
      result.transcation += value.transcation; 
      if (value.payment>0) print('value:',value.register,value.login,value.payment,value.transaction); 
     }); 
     return result; 
    } 


    var options = { 
     out:{merge:"mr_users"}, 
     query:{ 
      "event":{$in:["register","login","YA0charge"]}, 
      "properties.time": {"$gte": new Date("9 1 2013"), "$lt": new Date("9 3 2013")} 
     } 
    } 

    eventCollection.mapReduce(map,reduce,options,function (err, collection2) { 
     logger.info('MapReduce for basic is done.'); 
     collection2.find().toArray(function(err,item){ 
      logger.silly(item); 
     }); 
    }); 

} 

답변

0

당신은 당신의 코드에서 transcationtransaction 필드 이름의 혼합을 가지고있다. 처음에 전환 된 ca을 확인하십시오.

+0

감사합니다. 너무 바보 같은 문제라고 생각할 수 없습니다. – blackgun