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

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

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

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

181051 次浏览
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 转储。

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

@ karoly-horvath 是对的 csv 需要字段。

根据 MongoDB 中的这个 bug,问题跟踪器 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

Full command:

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

另外,不允许在逗号分隔的字段名之间使用空格。

坏消息: -f firstname, lastname

好: -f firstname,lastname

If you want, you can export all collections to csv without specifying --fields (will export all 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;

我没法让蒙古出口公司帮我做这个。我发现,要获得所有字段的详尽列表,需要循环遍历整个集合一次。使用此选项生成标题。然后再次遍历该集合以填充每个文档的这些头。

I've written a script to do just this. Converting MongoDB docs to csv irrespective of schema differences between individual documents.

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

另外,如果您想导出内部的 json 字段,可以使用点(. Operator)。

JSON 记录:

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

带点运算符的 mongoexport 命令(使用 mongo 版本3.4.7) :

./mongoexport —— host localhost —— db myDB —— Collection myColl —— type = csv —— out. csv —— fields < strong > value.deviceId,value.userID

输出 csv:

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

注意: 请确保不要导出数组,否则会破坏 CSV 格式,如上面 所示的 userID 字段

下面的命令用于将集合导出为 CSV 格式。

注: naag是数据库,employee1_json是集合。

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

MongoDB 地图集用户解决方案!

添加 --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>..."

对于那些被错误困住的人来说。

让我给你们一个解决方案,简单解释一下:-

command to connect:-

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

主机—— > Mongo 服务器主机

- 端口-> Mongo 服务器端口

- u —— > 用户名

- P —— > 密码

—— db —— > db,从中导出

——集合—— > 要导出的集合

—— type —— > 我的案例中的导出类型 CSV

—— out —— > 要导出的文件名

—— fields —— > 要导出的所有字段(在 CSV 情况下,不要在两个字段名之间的逗号中间留空格)

—— enticationDatabase —— > 存储所有用户信息的数据库

这对我有用,试试看

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

工程为我远程到一个码头容器与 mongo: 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

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

作为 MongoDB 的 GUI,MongoDB Compass 允许您对文档结构、查询、索引、文档验证等做出更明智的决策。商业订阅包括 MongoDB Compass 的技术支持。 Https://www.mongodb.com/try/download/compass enter image description here