将 MongoDB 集合导出为 CSV 文件
MongoDB 数据库工具包含一个名为 mongoexport 的命令行实用工具,支持将 MongoDB 数据导出为 CSV 或 JSON 文件。
本文介绍如何将 MongoDB 集合导出为 CSV 文件。mongoexport
语法
的语法是这样的:mongoexport
mongoexport --collection=<coll> <options> <connection-string>
您需要从系统的命令行(例如,新的终端或命令提示符窗口)运行命令。mongoexport
不要从命令行管理程序运行命令。mongoexport``mongo
导出集合
以下示例代码从 MongoDB 导出集合:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --out=data/pets.csv
这会将从数据库调用的集合导出到文件夹中调用的文件。pets``PetHotel``pets.csv``data/
如果该文件夹不存在,则会创建该文件夹。与文件相同。顺便说一下,这假设将文件写入指定位置没有权限问题。
在此示例中,我没有指定任何主机、端口、身份验证等,因此它从默认本地主机端口号上运行的 MongoDB 实例导出集合。27017
以下是我们在此处提供的参数的说明。
| 参数 | 描述 |
|---|---|
--db |
|
| 或 | |
-d |
指定包含要导出的集合的数据库。在这种情况下,数据库称为 。 |
也可以使用 (而不是 ) 传递此参数。PetHotel``-d``--db |
|
--collection |
|
| 或 | |
-c |
指定要导出的集合。在这种情况下,集合称为 。 |
也可以将此参数作为 (而不是 ) 传递。pets``-c``--collection |
|
--type |
指定导出的文件类型。在这种情况下,我们指定将其导出为CSV文件。csv |
--fields |
指定要导出的字段。我们可以选择导出集合中的所有字段,或者仅导出一些字段。您需要在此处列出每个,用逗号分隔。导出为 CSV 时,必须指定字段名称。您可以通过参数或参数(稍后会详细介绍)执行此操作。--fields``--fieldFile |
--out |
指定导出的文件名及其位置。如果未指定文件名, 会将数据写入标准输出 ()。mongoexport``stdout |
检查导出的文件
让我们验证导出操作是否按预期工作。
首先,让我们检查原始集合。
use PetHotel
db.pets.find()
结果:
{ “_id” : 1, “name” : “Wag”, “type” : “Dog”, “weight” : 20 } { “_id” : 2, “name” : “Bark”, “type” : “Dog”, “weight” : 10 } { “_id” : 3, “name” : “Meow”, “type” : “Cat”, “weight” : 7 } { “_id” : 4, “name” : “Scratch”, “type” : “Cat”, “weight” : 8 } { “_id” : 5, “name” : “Bruce”, “type” : “Bat”, “weight” : 3 } { “_id” : 6, “name” : “Fetch”, “type” : “Dog”, “weight” : 17 } { “_id” : 7, “name” : “Jake”, “type” : “Dog”, “weight” : 30 }
因此,我们可以看到有 7 只宠物,它们都具有我们在导出操作中指定的相同字段。
现在让我们打开导出的文件以查看其中的内容:pets.csv
_id,name,type,weight 1,Wag,Dog,20 2,Bark,Dog,10 3,Meow,Cat,7 4,Scratch,Cat,8 5,Bruce,Bat,3 6,Fetch,Dog,17 7,Jake,Dog,30
好的,所以所有数据都按预期在导出的文件中。
删除列标题
您会注意到,上一示例中导出的文件包含列标题。
您还可以选择导出_不带_列标题的文件。为此,请使用该参数。--noHeaderLine
例:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --noHeaderLine --out=data/pets.csv
现在,当我打开导出的文件时,没有列标题:
1,Wag,Dog,20 2,Bark,Dog,10 3,Meow,Cat,7 4,Scratch,Cat,8 5,Bruce,Bat,3 6,Fetch,Dog,17 7,Jake,Dog,30
使用文件作为字段名称
您可以将参数替换为参数,以指定包含要导出的字段名称的文件的名称。--field``--fieldFile
mongoexport --db=PetHotel --collection=pets --type=csv --fieldFile=data/pets_fields.txt --out=data/pets.csv
包含字段的文件必须列出字段,每行一个。
下面是此示例中的文件外观:pets_fields.txt
_id name type weight
这导致导出文件的内容如下所示:
_id,name,type,weight 1,Wag,Dog,20 2,Bark,Dog,10 3,Meow,Cat,7 4,Scratch,Cat,8 5,Bruce,Bat,3 6,Fetch,Dog,17 7,Jake,Dog,30
更改列顺序
您可以切换要导出的字段的顺序。它们不必与基础文档的顺序相同。
例如,此代码:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,weight,type,name --out=data/pets.csv
结果为以下 CSV 文件:
_id,weight,type,name 1,20,Dog,Wag 2,10,Dog,Bark 3,7,Cat,Meow 4,8,Cat,Scratch 5,3,Bat,Bruce 6,17,Dog,Fetch 7,30,Dog,Jake
以及以下内容:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=type,name,weight,_id --out=data/pets.csv
结果是:
type,name,weight,_id Dog,Wag,20,1 Dog,Bark,10,2 Cat,Meow,7,3 Cat,Scratch,8,4 Bat,Bruce,3,5 Dog,Fetch,17,6 Dog,Jake,30,7
访问控制/身份验证
如果不使用 localhost,则可以使用该参数来指定主机和端口。还可以使用该参数指定用户名和密码。如果省略密码参数,系统将提示您输入密码参数。还有一个参数用于指定已在其中创建用户的身份验证数据库。--host``--port``--username``--password``--authenticationDatabase
例:
mongoexport --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --out=data/pets.csv
检查mongoexport
mongoexport是 MongoDB 数据库工具包的一部分。MongoDB数据库工具是一套用于使用MongoDB的命令行实用程序。
如果您不确定是否安装了MongoDB数据库工具/,请尝试在终端或命令提示符下运行以下命令进行检查:mongoexport
mongoexport --version
如果有,您应该会看到版本信息等。如果您没有它,您可以使用MongoDB网站上的安装说明将其安装到您的系统上。
在哪里运行命令?
不要忘记,您需要从系统的命令行(例如新的终端或命令提示符窗口)运行命令。mongoexport
不要从 shell 运行它们。mongo