2014年3月11日火曜日

【mongo】mongoでクエリ結果をCSV出力する

mongoShell書いていて、出力結果をjsonで出す時は以下のコマンドでできるけど、

$ mongo collectionName < query.js > result.json

CSVってどうすればいいのかなーって調べた。

標準実装もされていないのでネットから拾って来たobject to csvな関数でやる。


// json2csv.js
function JSON2CSV(objArray) {
            var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
            var str = '';

            for (var i = 0; i < array.length; i++) {
                var line = '';
                for (var index in array[i]) {
                    if (line != '') line += ','

                    line += array[i][index];
                }

                str += line + '\n';
            }

            return str;
} 



// query.js
load('/etc/mongo/json2csv.js');

var start = ISODate('2014-02-27 00:00:00');
var end = ISODate('2014-02-28 24:00:00');
var res = db.error.aggregate([
 {$match :{time:{$gte:start,$lt:end}}},
 {$group : { "_id" : "$message" , "count" : { $sum : 1} }},
 { $sort : { count : -1 } },
 ]);

print(JSON2CSV(res.result));

これでできる。
注意しないと行けないのはaggregateを使うと結果jsonがres.resultに入っていて、
find()使うとtoArray()というメソッドで変換しないといないところ

あと空白処理とか入れてないしできないと思われ

ともあれ出力できた(*u*

0 件のコメント:

コメントを投稿

ShareThis