2012-05-01 10 views
0

私はでmap/reduce関数を実行しようとしています。私は、コレクション内のオブジェクトに含まれる3つの異なるフィールドでグループ化します。 map/reduce関数を実行することはできますが、出力されたすべてのフィールドは出力コレクションで一緒に実行されます。私はこれが正常であるかどうかはわかりませんが、分析のためにデータを出力すると、クリーンアップのためのより多くの作業が必要になります。それらを分離する方法はありますか?mongoexport?私は、グループにしようとしていますフィールドは一日、ユーザーID(またはuid)ですMongodb Map/Reduce - Multiple Group By

と宛先:

は、私が何を意味するかをお見せしましょう。

私は、これらの機能を実行します。

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"}); 

出力は次のようになります。私はmongoexportを使用しようとすると

{ "_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 } } 

、私は別の日に、UID、または列によって目的地ができないためmapはフィールドを結合します。私は次のようになりたいと思うパートナーはどのような

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

これはさえ可能ですか?

私は、ファイルにsedを適用し、CSVをクリーンアップして出力を行うことができました。より多くの作業が、うまくいきました。正しいフォーマットでmongodbから取り出せれば理想的です。

+1

mongoexportは非常にシンプルなツールであり、まだ埋め込まれたフィールドをサポートしていません。 – Ren

答えて