集計の結果をcsvファイルに保存したい。
Mongo cmd lineツールを使用して、これを実行して必要な結果を取得できます。
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
これを結果をcsvに保存するmongoexportコマンドにどのように変換しますか?
mongoexport
を介して aggregate() クエリを実行することはできません。 mongoexport
ツールは、完全な集計とデータ処理ではなく、クエリフィルターを使用したより基本的なデータエクスポートを目的としています。ただし、MongoDBの場合は、お気に入りの 言語ドライバー を使用して短いスクリプトを簡単に作成できます。
2.6+以降の少し単純なオプションは、集計に$ outステップを追加して、結果をコレクションに入れることです。
db.collection.aggregate( [ { aggregation steps... }, { $out : "results" } ] )
次に、mongoexportを使用します
mongoexport -d database -c results -f field1,field2,etc --csv > results.csv
その後、データベースから一時的なコレクションを削除して、不要なリソースを使用し続けないようにし、後でこのコレクションがデータベースに存在する理由を忘れたときに混乱を避けることもできます。
db.results.drop()
次の3つの手順でCSVファイルにエクスポートできます。
集計結果を変数に割り当てます( reference ):
var result = db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
変数の値を新しいコレクションに挿入します。
db.bar.insert(result.result);
ターミナル(またはコマンドライン)で、このbarコレクションをCSVファイルにエクスポートします。
mongoexport -d yourdbname -c bar -f _id,total --csv > results.csv
...これで完了です:)
結果をコレクションに保存したくない場合は、print関数を使用してJavaScriptからCSVファイルに直接書き込むこともできます。次のスクリプトをexportCompras.jsなどのファイルに保存します。
var cursor = db.compras.aggregate({ $group :
{ _id : "$data.proponente",
total : { $sum : "$price" }
}
});
if (cursor && cursor.hasNext()) {
//header
print('proponente,total');
while ( cursor.hasNext() ) {
var item = cursor.next();
print('"' + item._id + '",' + item.total);
//printjson(cursor.next()); -- or if you prefer the JSON
}
}
コマンドラインから呼び出します
mongo server/collection exportCompras.js> comprasResults.csv --quiet
以下を実行し、mongoサーバーのどこかに保存します。
// Export to CSV function
DBCommandCursor.prototype.toCsv = function(deliminator, textQualifier)
{
var count = -1;
var headers = [];
var data = {};
deliminator = deliminator == null ? ',' : deliminator;
textQualifier = textQualifier == null ? '\"' : textQualifier;
var cursor = this;
while (cursor.hasNext()) {
var array = new Array(cursor.next());
count++;
for (var index in array[0]) {
if (headers.indexOf(index) == -1) {
headers.Push(index);
}
}
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
data[count + '_' + index] = array[i][index];
}
}
}
var line = '';
for (var index in headers) {
line += textQualifier + headers[index] + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
for (var i = 0; i < count + 1; i++) {
var line = '';
var cell = '';
for (var j = 0; j < headers.length; j++) {
cell = data[i + '_' + headers[j]];
if (cell == undefined) cell = '';
line += textQualifier + cell + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
}
}
その後、シェルまたはRobomongoなどのGUIを介して次のコマンドを実行できます。
load('C:\\path\\to\\your\\saved\\js\\file')
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}.toCsv();