web-dev-qa-db-ja.com

mongoクエリの出力をcsvファイルにリダイレクトする

32ビットWindows7マシン用にMongoDB 2.2.2を使用しています。 .jsファイルに複雑な集計クエリがあります。このファイルをシェルで実行し、出力をCSVファイルに送信する必要があります。クエリが「フラットな」json(ネストされたキーなし)を返すようにするため、本質的にきちんとしたcsvに変換できます。

load()およびeval()について知っています。 eval()では、クエリ全体をシェルに貼り付ける必要があり、スクリプト内ではprintjson()のみが許可されますが、csvが必要です。そして、2番目の方法:load()...出力を画面に出力し、再びjson形式で出力します。

jgoからcsvへの変換をMongoで実行できる方法はありますか? (データのチャートを作成するにはcsvファイルが必要です)。私は考えています:

1。どちらのmongoにもこのコマンドが組み込まれていますが、今は見つけることができません。
2。 Mongoは私にはできません。私はせいぜいcsvに変換する必要があるファイルにjson出力を最大で送ることができます。
3。 Mongoは、jsonの出力を一時的なコレクションに送信できます。そのコンテンツは、簡単にmongoexportedからcsv形式に変換できます。ただし、map-reduceクエリのみが出力コレクションをサポートすると思います。そうですか?集計クエリに必要です。

助けてくれてありがとう:)

71
Aafreen Sheikh

この質問は古いことは知っていますが、複雑なクエリをcsvにエクスポートしようとして1時間を費やし、考えを共有したいと思いました。最初に、jsonからcsvへのコンバーターを機能させることができませんでした(ただし、 this 1つは有望に見えました)。最終的に私がやったのは、mongoスクリプトでcsvファイルを手動で書くことでした。

これはシンプルなバージョンですが、基本的に私がやったことです:

print("name,id,email");
db.User.find().forEach(function(user){
  print(user.name+","+user._id.valueOf()+","+user.email);
});

これはクエリを標準出力にパイプしただけです

mongo test export.js > out.csv

ここで、testは、使用するデータベースの名前です。

147
GEverding

Mongoの組み込みエクスポートは、フォーマットの日付、隠しデータ型などのデータ操作が必要でない限り、正常に機能しています。

次のコマンドは魅力として機能します。

    mongoexport -h localhost -d databse -c collection --type=csv 
    --fields erpNum,orderId,time,status 
    -q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}' 
    --out report.csv
89
thisarattr

ここにあなたが試すことができるものがあります:

print("id,name,startDate")
cursor = db.<collection_name>.find();
while (cursor.hasNext()) {
    jsonObject = cursor.next();
    print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"")

}

「export.js」と言うファイルに保存します。次のコマンドを実行します。

mongo <Host>/<dbname> -u <username> -p <password> export.js > out.csv
6
Shirish Kumar

他の回答の拡張:

@GEverdingの答えが最も柔軟であることがわかりました。集約でも機能します。

test_db.js

print("name,email");

db.users.aggregate([
    { $match: {} }
]).forEach(function(user) {
        print(user.name+","+user.email);
    }
});

次のコマンドを実行して、結果をエクスポートします。

mongo test_db < ./test_db.js >> ./test_db.csv

残念ながら、CSVファイルに追加のテキストが追加されるため、使用する前にファイルを処理する必要があります。

MongoDB Shell version: 3.2.10 
connecting to: test_db

ただし、--quietフラグを渡すことで、mongo Shellがこれらのコメントを出力しないようにし、要求した内容だけを出力できます。

mongo --quiet test_db < ./test_db.js >> ./test_db.csv
5
Lucky Soni

this をご覧ください

mongoシェルからファイルへの出力用。 mongos Shellからのcsvの出力はサポートされていません。 JavaScriptを自分で記述するか、利用可能な多くのコンバーターのいずれかを使用する必要があります。たとえば、Googleは「jsonをcsvに変換」します。

5
geakie