如何在MongoDB中将集合导出为CSV?

Suc*_*tha 88 database csv mongodb schemaless

如何将MongoDB集合中的所有记录导出到.csv文件中?

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
Run Code Online (Sandbox Code Playgroud)

这要求我指定我需要导出的字段的名称.我可以直接导出所有字段而不指定字段名称吗?

cam*_*son 95

@ 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
Run Code Online (Sandbox Code Playgroud)

更新:

此提交: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"`
Run Code Online (Sandbox Code Playgroud)

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

版本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
Run Code Online (Sandbox Code Playgroud)

  • 从版本3.0.6开始,`mongoexport`表示`csv flag已被弃用; 请使用--type = csv代替 (14认同)
  • 有没有一种快速的方法来包含所有字段而不是命名每个字段? (4认同)

mur*_*sp1 52

此外,逗号分隔的字段名称之间不允许使用空格.

坏: -f firstname, lastname

好: -f firstname,lastname


Kar*_*ath 26

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
Run Code Online (Sandbox Code Playgroud)

你必须手动指定它,如果你考虑它,它是完全合理的.MongoDB是无模式的; 另一方面,CSV具有固定的列布局.如果不知道在不同文档中使用了哪些字段,则无法输出CSV转储.

如果您有一个固定的模式,也许您可​​以检索一个文档,使用脚本从中获取字段名称并将其传递给mongoexport.


Mic*_*ael 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;
Run Code Online (Sandbox Code Playgroud)

  • 只有上述脚本的问题在于它假定每个集合中的第一个文档包含可能出现在该集合中的文档中的所有可能的键; 如果文档类型可以包含数组或嵌套的子文档,则可能不是这种情况. (4认同)

小智 7

使用 Mongo Compass 工具轻松导出 csv 或 json 文件

Mongo Compass 作为 MongoDB 的 GUI,MongoDB Compass 允许您就文档结构、查询、索引、文档验证等做出更明智的决策。商业订阅包括 MongoDB Compass 的技术支持。 https://www.mongodb.com/try/download/compass 在此输入图像描述


use*_*313 5

适用于我使用 mongo 远程连接到 docker 容器:4.2.6

mongoexport -h mongodb:27017 --authenticationDatabase=admin -u username -p password -d database -c collection -q {"created_date": { "$gte": { "$date": "2020-08-03T00:00:00.000Z" }, "$lt": { "$date": "2020-08-09T23:59:59.999Z" } } } --fields=somefield1,somefield2 --type=csv --out=/archive.csv
Run Code Online (Sandbox Code Playgroud)