如何将MongoDB集合中的所有记录导出到.csv
文件?
mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
这要求我指定我需要导出的字段的名称。我可以直接导出所有字段而不指定字段名称吗?
答案 0 :(得分:89)
@ 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\" "`
VERSION 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
答案 1 :(得分:50)
此外,逗号分隔的字段名称之间不允许使用空格。
BAD:
-f firstname, lastname
GOOD:
-f firstname,lastname
答案 2 :(得分: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
你必须手动指定它,如果你考虑它,它是完全合理的。 MongoDB是无模式的;另一方面,CSV具有固定的列布局。不知道在不同文档中使用了哪些字段,就无法输出CSV转储。
如果您有一个固定的模式,也许您可以检索一个文档,使用脚本从中获取字段名称并将其传递给mongoexport。
答案 3 :(得分: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 :(得分:3)
我无法让mongoexport为我这样做。我发现,要获得所有字段的详尽列表,您需要遍历整个集合一次。使用它来生成标题。然后再次遍历集合以填充每个文档的这些标题。
我写了一个脚本来做这件事。将MongoDB文档转换为csv,而不考虑各个文档之间的模式差异。
答案 5 :(得分:1)
为我工作,使用mongo:4.2.6远程处理到Docker容器
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
答案 6 :(得分:0)
此外,如果要导出内部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""]"
注意:确保不导出数组。它会破坏CSV格式,如上面显示的字段userIds
答案 7 :(得分:0)
下面用于将集合导出为CSV格式的命令。
注意:naag
是数据库,employee1_json
是一个集合。
mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1
答案 8 :(得分:0)
将--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>..."
答案 9 :(得分:0)
这对我有用
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
答案 10 :(得分:0)
使用 Mongo Compass 工具轻松导出 csv 或 json 文件
Mongo Compass 作为 MongoDB 的 GUI,MongoDB Compass 允许您在文档结构、查询、索引、文档验证等方面做出更明智的决策。商业订阅包括对 MongoDB Compass 的技术支持。 https://www.mongodb.com/try/download/compass
答案 11 :(得分:-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->您要从中导出的数据库
-集合->您要导出的集合
-类型->以我的情况为CSV的导出类型
-out->您要导出的文件名
-fields->您要导出的所有字段(对于CSV,请勿在逗号之间的两个字段名称之间留空格)
-authenticationDatabase->存储所有用户信息的数据库