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

如何在MongoDB中将集合导出为CSV?,mongodb,csv,schemaless,database,Mongodb,Csv,Schemaless,Database,如何将MongoDB集合中的所有记录导出到.csv文件 mongoexport --host localhost --db dbname --collection name --type=csv > test.csv 这要求我指定需要导出的字段的名称。我可以只导出所有字段而不指定字段名称吗 mongoexport --help .... -f [ --fields ] arg comma separated list of field names e.g. -f name,ag

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

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
这要求我指定需要导出的字段的名称。我可以只导出所有字段而不指定字段名称吗

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问题跟踪器中的此错误,导出到csv时必须提供字段。上面的文件不清楚。这就是错误的原因

试试这个:

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

此提交:修复3.0.0-rc10及更高版本的文档。它改变了

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

3.0及以上版本:

您应该使用
--type=csv
而不是
--csv
,因为它已被弃用

更多详情:

完全命令:

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

此外,逗号分隔的字段名之间不允许有空格

坏的:
-f firstname,lastname

好:
-f firstname,lastname
如果需要,可以将所有集合导出到csv,而无需指定
--字段(将导出所有字段)

从中运行此bash脚本

OIFS=$IFS;
IFS=“,”;
#请在这里填写您的详细信息
dbname=dbname
用户=用户名
pass=密码
主机名:端口
#首先获取数据库中的所有集合
collections=`mongo“$host/$dbname”-u$user-p$pass--eval“rs.slaveOk();db.getCollectionNames();”;
collections=`mongo$dbname--eval“rs.slaveOk();db.getCollectionNames();”;
collectionArray=($collections);
#对于每个集合

对于((i=0;i我无法让mongoexport为我执行此操作。我发现,要获得所有字段的详尽列表,您需要在整个集合中循环一次。使用此操作生成标题。然后再次循环集合以填充每个文档的标题

我已经编写了一个脚本来实现这一点。将MongoDB文档转换为csv,而不考虑各个文档之间的模式差异


如果要导出内部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--fieldsvalue.deviceId,value.userid

输出csv:

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

注意:确保不导出数组。这会损坏CSV格式,如上面显示的用于将集合导出为CSV格式的命令下方的字段用户ID

注意:
naag
是数据库,
employee1\u json
是集合

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1
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>..."
mongoexport--host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017--ssl--username--password--authenticationDatabase admin--db--collection--type--out--fields“,…”

适用于所有被错误困扰的人

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

要连接的命令:-

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

--集合-->要导出的集合

--类型-->我的案例中的导出类型CSV

--输出要导出的-->文件名

--字段-->要导出的所有字段(如果是CSV,请不要在两个字段名之间的逗号之间加空格)


--authenticationDatabase-->存储所有用户信息的数据库

这对我有用,试试看

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远程处理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

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

MongoCompass作为MongoDB的GUI,MongoDB Compass允许您在文档结构、查询、索引、文档验证等方面做出更明智的决策。商业订阅包括对MongoDB Compass的技术支持。

我只是在搜索是否可以从a记录中获取字段列表。例如,从db.collection.finOne().getFields()。但我想这不是正确的方法(getFields)。我尝试了getKeys()还有。否则,我将不得不使用key:value散列来获取记录。我正在尝试做同样的事情,但要弄清楚为什么它不能正确导入csv文件。在我的情况下,我需要它告诉我关于它自身的一切,包括它“发明”的字段就其本身而言。因此,在我的情况下,必须指定字段是没有意义的,因为我不知道它们都是什么!在字段捕获脚本的前面,我发布了一年左右的时间,可能会给您一些想法。上述脚本的唯一问题是,它假设每个集合中的第一个文档包含可能应用程序的所有键ear在该集合中的文档中;如果文档类型可以包含数组或嵌套子文档,则可能不会出现这种情况。@arober11您是对的,忘了提及这一重要事实。我通常做的是,运行a定期收集所有密钥,并使用它提取版本3.0.6的所有密钥。
mongoexport
表示
csv标志已弃用;请改用--type=csv
感谢(匿名)提供此版本
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