如何将MongoDB查询结果导出到JSON文件

发布于

MongoDB 数据库工具包含一个名为 mongoexport 的命令行实用工具,支持将 MongoDB 数据导出为 CSV 或 JSON 文件。

您可以使用此用途执行的操作之一是导出查询结果。本文介绍如何使用 将 MongoDB 查询结果导出到 JSON 文件。mongoexport

语法

的语法是这样的:mongoexport

mongoexport --collection=<coll> <options> <connection-string>

您需要从系统的命令行(例如,新的终端或命令提示符窗口)运行命令。mongoexport

不要从命令行管理程序运行命令。mongoexport``mongo

例

以下示例代码将查询结果导出到 JSON 文件:

mongoexport --db=PetHotel --collection=pets --query='{ "type": "Dog" }' --out=data/dogs.json

这将导出查询数据库中调用的集合的查询。查询将导出到文件夹中调用的文件。pets``PetHotel``dogs.json``data/

如果该文件夹不存在,则会创建该文件夹。与文件相同。顺便说一下,这假设将文件写入指定位置没有权限问题。

在此示例中,我没有指定任何主机、端口、身份验证等,因此它从默认本地主机端口号上运行的 MongoDB 实例导出集合。27017

还可以使用该参数显式指定 JSON。默认值为 JSON,因此在导出为 JSON 时这是可选的。--type

您还可以包含一个参数来指定要导出的字段。默认情况下,它会在使用 JSON 时导出所有字段。但是,导出为 CSV 时,必须指定要导出的字段。--fields

下面是添加了这两个参数的上述示例的示例:

mongoexport --db=PetHotel --collection=pets --type=json --fields=_id,name,type,weight --query='{ "type": "Dog" }' --out=data/dogs.json

以下是我们在此处提供的参数的说明。

参数 描述
--db
或
-d 指定要在其上运行 的数据库。在这种情况下,数据库称为 。
也可以使用 (而不是 ) 传递此参数。mongoexport``PetHotel``-d``--db
--collection
或
-c 指定要导出(或对其运行查询)的集合。在这种情况下,集合称为 。
也可以将此参数作为 (而不是 ) 传递。pets``-c``--collection
--type 指定导出的文件类型。在这种情况下,我们指定将其导出到 JSON 文件。鉴于 JSON 是默认值,则导出为 JSON 时此参数是可选的。json
--fields 指定要导出的字段。我们可以选择导出所有字段或仅导出部分字段。导出为 JSON 时,指定字段名称是可选的(这是导出为 CSV 时的一项要求)。
--query
或
-q 指定要导出其结果的查询。这必须括在单引号中(这样它就不会与你的 shell 交互)。
也可以使用 传递此参数。-q
--out 指定导出的文件名及其位置。如果未指定文件名, 会将数据写入标准输出 ()。mongoexport``stdout

检查导出的文件

让我们验证导出操作是否按预期工作。

首先,让我们针对原始集合运行查询。

use PetHotel
db.pets.find({ "type": "Dog" })

结果:

{ “_id” : 1, “name” : “Wag”, “type” : “Dog”, “weight” : 20 } { “_id” : 2, “name” : “Bark”, “type” : “Dog”, “weight” : 10 } { “_id” : 6, “name” : “Fetch”, “type” : “Dog”, “weight” : 17 } { “_id” : 7, “name” : “Jake”, “type” : “Dog”, “weight” : 30 }

因此,我们可以看到有 4 只狗,它们都具有我们在导出操作中指定的相同字段。

现在让我们打开导出的文件以查看其中的内容:dogs.json

{"_id":1.0,“name”:“Wag”,“type”:“Dog”,“weight”:20.0} {"_id":2.0,“name”:“Bark”,“type”:“Dog”,“weight”:10.0} {"_id":6.0,“name”:“Fetch”,“type”:“Dog”,“weight”:17.0} {"_id":7.0,“name”:“Jake”,“type”:“Dog”,“weight”:30.0}

All data is in the exported file as expected.

导出较少字段

如果需要,您可以使用参数指定较少的字段。--fields

例:

mongoexport --db=PetHotel --collection=pets --fields=name,weight --query='{ "type": "Dog" }' --out=data/dogs.json

生成的文件:

{"_id":1.0,“name”:“Wag”,“weight”:20.0} {"_id":2.0,“name”:“Bark”,“weight”:10.0} {"_id":6.0,“name”:“Fetch”,“weight”:17.0} {"_id":7.0,“name”:“Jake”,“weight”:30.0}

您会注意到该字段包含在导出的文件中,即使我没有明确将其包含在参数中。这是因为导出为 JSON 时始终包含该字段 - 即使您没有明确包含它。导出为 CSV 时并非如此。_id``--fields``_id

访问控制/身份验证

如果不使用 localhost,则可以使用该参数来指定主机和端口。还可以使用该参数指定用户名和密码。如果省略密码参数,系统将提示您输入密码参数。还有一个参数用于指定已在其中创建用户的身份验证数据库。--host``--port``--username``--password``--authenticationDatabase

例:

mongoexport --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --db=PetHotel --collection=pets --query='{ "type": "Dog" }' --out=data/dogs.json

检查mongoexport

mongoexport是 MongoDB 数据库工具包的一部分。MongoDB数据库工具是一套用于使用MongoDB的命令行实用程序。

如果您不确定是否安装了MongoDB数据库工具/,请尝试在终端或命令提示符下运行以下命令进行检查:mongoexport

mongoexport --version

如果有,您应该会看到版本信息等。如果您没有它,您可以使用MongoDB网站上的安装说明将其安装到您的系统上。

在哪里运行命令?

不要忘记,您需要从系统的命令行(例如新的终端或命令提示符窗口)运行命令。mongoexport