112

.csvMongoDBコレクション内のすべてのレコードをファイルにエクスポートするにはどうすればよいですか?

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

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

4

12 に答える 12

132

@karoly-horvath はその通りです。csv にはフィールドが必要です。

MongoDB issue tracker 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
于 2012-11-08T06:19:01.383 に答える
53

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

悪い: -f firstname, lastname

良い: -f firstname,lastname

于 2013-01-26T17:18:26.777 に答える
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 に渡すことができます。

于 2011-07-25T09:42:39.700 に答える
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;
于 2013-12-31T21:51:17.443 に答える
3

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

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

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

于 2015-07-12T07:06:57.000 に答える
-1

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

同じことを簡単に説明して解決策を教えてください:-

接続するコマンド:-

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 --> エクスポート元のデータベース

--collection --> エクスポートしたいコレクション

--type --> 私の場合のエクスポートの種類 CSV

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

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

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

于 2020-06-30T06:23:53.967 に答える