2012-05-01 4 views
0

에서 map/reduce 함수를 실행하려고하는데, 여기서 내 컬렉션의 개체에 포함 된 3 개의 다른 필드로 그룹화합니다. map/reduce 함수를 실행할 수는 있지만 출력 된 모든 필드는 출력 컬렉션에서 함께 실행됩니다. 정상인지 아닌지는 잘 모르겠지만 분석을 위해 데이터를 출력하면 더 많은 작업이 필요합니다. 그들을 분리하는 방법이 있습니까, 그렇다면 mongoexport을 사용 하시겠습니까? Mongodb 맵/Reduce - 다중 그룹 By

내가 무슨 뜻인지 보여 드리죠 :

일, 사용자 ID (또는 UID)와 대상이다가 내가 그룹에 노력하고 필드는.

나는 이러한 기능을 실행

map = function() { 
    day = (this.created_at.getFullYear() + "-" + (this.created_at.getMonth()+1) + "-" + this.created_at.getDate()); 
    emit({day: day, uid: this.uid, destination: this.destination}, {count:1}); 
} 

/* Reduce Function */ 
reduce = function(key, values) { 
    var count = 0; 
    values.forEach(function(v) { 
     count += v['count']; 
} 
); 
    return {count: count}; 
} 

/* Output Function */ 
db.events.mapReduce(map, reduce, {query: {destination: {$ne:null}}, out: "TMP"}); 

출력은 다음과 같습니다 열로

{ "_id" : { "day" : "2012-4-9", "uid" : "1234456", "destination" : "Home" }, "value" : { "count" : 1 } } 
{ "_id" : { "day" : "2012-4-9", "uid" : "2345678", "destination" : "Home" }, "value" : { "count" : 1 } } 
{ "_id" : { "day" : "2012-4-9", "uid" : "3456789", "destination" : "Login" }, "value" : { "count" : 1 } } 
{ "_id" : { "day" : "2012-4-9", "uid" : "4567890", "destination" : "Contact" }, "value" : { "count" : 1 } } 
{ "_id" : { "day" : "2012-4-9", "uid" : "5678901", "destination" : "Help" }, "value" : { "count" : 1 } } 

내가 mongoexport을 사용하려고, 난 못해 별도의 일, UID, 또는 대상 수있는 때문에 map은 필드를 결합합니다. I는 다음과 같이 것하고 싶은 무엇

:

{ { "day" : "2012-4-9" }, { "uid" : "1234456" }, { "destination" : "Home"}, { "count" : 1 } } 

이도 가능합니까?

마찬가지로 - 파일에 sed을 적용하고 CSV를 정리하여 출력 작업을 할 수있었습니다. 더 많은 일을했지만 효과가있었습니다. 올바른 형식으로 mongodb을 얻을 수 있다면 이상적입니다.

+1

mongoexport는 매우 간단한 도구입니다 아직 임베디드 분야를 지원하지 않습니다. – Ren

답변