MongoDBでコレクションをCSVにエクスポートする方法は?


97

MongoDBコレクションのすべてのレコードをどのように.csvファイルにエクスポートしますか?

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv

これにより、エクスポートする必要があるフィールドの名前を指定するように求められます。フィールド名を指定せずにすべてのフィールドをエクスポートできますか?

回答:


112

@ karoly-horvathは正しいです。csvにはフィールドが必要です。

MongoDBの問題トラッカーhttps://jira.mongodb.org/browse/SERVER-4224の このバグによると、csvにエクスポートする場合はフィールドを指定する必要があります。ドキュメントは明確ではありません。それがエラーの理由です。

これを試して:

mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName

更新:

このコミット:https : //github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398は、3.0.0-rc10以降のドキュメントを修正しています。それは変わる

Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`

Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`

バージョン3.0以降:

廃止予定なので、--type=csv代わりに使用してください--csv

詳細:https : //docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format

完全なコマンド:

mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName

16
バージョン3.0.6以降でmongoexportは次のように記載されていますcsv flag is deprecated; please use --type=csv instead
Roman Dibikhin

VERSION 3.0 AND ABOVE編集を(匿名で)感謝します。
campeterson 2018

4
それぞれに名前を付ける代わりにすべてのフィールドを含めるための高速な方法はありますか?
Kevz

53

また、コンマ区切りのフィールド名の間にスペースを入れることはできません。

悪い: -f firstname, lastname

良い: -f firstname,lastname


27
mongoexport  --help
....
-f [ --fields ] arg     comma separated list of field names e.g. -f name,age
--fieldFile arg         file with fields names - 1 per line

あなたはそれを手動で指定する必要があり、それについて考えれば、それは完全に理にかなっています。MongoDBはスキーマレスです。一方、CSVは列のレイアウトが固定されています。異なるドキュメントで使用されているフィールドがわからない場合、CSVダンプを出力することはできません。

固定スキーマがある場合、おそらく1つのドキュメントを取得し、スクリプトでフィールド名を取得して、mongoexportに渡すことができます。


1
aレコードからフィールドのリストを取得できるかどうかを探していました。つまり、db.collection.finOne()。getFields()からです。しかし、私はそれが正しい方法ではないと思います(getFields)。getKeys()も試しました。それ以外の場合は、key:valueハッシュを使用してレコードを取得する必要があります。
サクシードスタ

私は同じことをやろうとしていますが、csvファイルが正しくインポートされない理由を理解するためです。私の場合、それ自体が「発明した」フィールドを含め、それ自体についてすべてを伝えるために必要です。したがって、私の場合、フィールドをすべて指定する必要はありません。フィールドが何なのかわからないからです。
スティーブン

収穫のスクリプトの前で、私はこれを 1年ほど前に投稿しました。
arober11

9

必要に応じて、指定せずにすべてのコレクションをcsvにエクスポートできます --fields(すべてのフィールドがエクスポートされます)。

http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/から、このbashスクリプトを実行します

OIFS=$IFS;
IFS=",";

# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT

# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);

# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
    echo 'exporting collection' ${collectionArray[$i]}
    # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
    keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
    # now use mongoexport with the set of keys to export the collection to csv
    mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;

4
上記のスクリプトの唯一の問題は、各コレクションの最初のドキュメントに、そのコレクションのドキュメントに出現する可能性のあるすべてのキーが含まれていると想定していることです。これは、文書型に配列またはネストされたサブ文書を含めることができる場合には当てはまらない場合があります。
arober11 2014

@ arober11あなたは正しい、この重要な事実を述べるのを忘れた。私が通常行うことは、map reduceスクリプトを実行してすべてのキーを定期的に収集し、それを使用してすべてのキーをプルすることです
Michael

3

mongoexportでこれを行うことができませんでした。すべてのフィールドの完全なリストを取得するには、コレクション全体を一度ループする必要があることがわかりました。これを使用してヘッダーを生成します。次に、コレクションを再度ループして、各ドキュメントにこれらのヘッダーを設定します。

これを行うためのスクリプトを作成しました。個々のドキュメント間のスキーマの違いに関係なく、MongoDBドキュメントをcsvに変換します。

https://github.com/surya-shodan/mongoexportcsv


2

また、内部JSONフィールドをエクスポートする場合は、ドット(。演算子)を使用します。

JSONレコード:

{
    "_id" : "00118685076F2C77",
    "value" : {
        "userIds" : [ 
            "u1"
        ],
        "deviceId" : "dev"
}

ドット演算子を使用したmongoexportコマンド(mongoバージョン3.4.7を使用):

./mongoexport --host localhost --db myDB --collection myColl --type = csv --out out.csv --fields value.deviceId、value.userIds

出力csv:

value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"

注:アレイをエクスポートしないでください。上記のフィールドuserIdsのようなCSV形式が破損します。


0

MongoDB Atlasユーザーのためのソリューション!

--fields二重引用符で囲まれたカンマ区切りのフィールド名としてパラメーターを追加します。

--fields "<FIELD 1>,<FIELD 2>..."

これは完全な例です:

mongoexport --host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017 --ssl --username <USERNAME> --password <PASSWORD> --authenticationDatabase admin --db <DB NAME> --collection <COLLECTION NAME> --type <OUTPUT FILE TYPE> --out <OUTPUT FILE NAME> --fields "<FIELD 1>,<FIELD 2>..."

-1

これは私のために働いています

mongoexport --host cluster0-shard-dummy-link.mongodb.net:27017 --db yourdbname --forceTableScan   --collection users --type json --out /var/www/html/user.json --authenticationDatabase admin --ssl --username Yourusername --password Yourpassword

フィルターフィールドが必要な場合は、cmdの上でユーザーコレクションのデータ全体を返し、次に--fields = email、nameを追加します


これは以下の回答とどう違うのですか?
ダニエルW.

mongodump --host cluster0-shard.mongodb.net:27017 --db dbname --forceTableScan --out / var / www / html / documents / db-12-2020 --authenticationDatabase admin --ssl --username youruname-これを試すことができるパスワードyourpasswordこれもまた、コレクション全体を提供します。
manoj patel

-2

コレクションをCSV形式にエクスポートするために使用する以下のコマンド。

注:naagはデータベースでemployee1_jsonあり、コレクションです。

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1

これは、mongodb 4が返すものです。失敗:CSVモードにはフィールドリストが必要です
FRIDDAY

-2

エラーで立ち往生しているすべての人のために。

同じことを簡単に説明して解決策を挙げましょう:-

接続するコマンド:-

mongoexport --host your_host --port your_port -u your_username -p your_password --db your_db --collection your_collection --type=csv --out file_name.csv --fields all_the_fields --authenticationDatabase admin

--host-> Mongoサーバーのホスト

--port-> Mongoサーバーのポート

-u->ユーザー名

-p->パスワード

--db->エクスポート元のdb

--collection->エクスポートするコレクション

--type->私の場合のエクスポートのタイプCSV

--out->エクスポートするファイル名

--fields->エクスポートするすべてのフィールド(CSVの場合、コンマの間にある2つのフィールド名の間にスペースを入れないでください)

--authenticationDatabase->すべてのユーザー情報が保存されるデータベース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.