mongoexport

在本页面

macOS Sierra and Go 1.6 Incompatibility

在 macOS Sierra 上运行的用户需要 3.2.10 或更高版本的 mongoexport。

Synopsis

mongoexport是一种 Util,可对存储在 MongoDB 实例中的数据进行 JSON 或 CSV 导出。

有关mongoimportUtil 的更多信息,请参见mongoimport文档。该 Util 提供反向的“导入”功能。

从系统命令行运行mongoexport,而不是mongo shell。

Considerations

Warning

避免将mongoimportmongoexport用于完整实例生产备份。它们不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示 BSON 支持的类型的子集。如MongoDB 备份方法中所述,使用mongodumpmongorestore来实现这种功能。

mongoexport必须直接从系统命令行运行。

为了保留类型信息,mongoexportmongoimport对某些类型使用严格模式表示

例如,以下在mongo shell 中的插入操作将Shell 模式表示用于 BSON 类型data_datedata_numberlong

use test
db.traffic.insert( { _id: 1, volume: NumberLong('2980000'), date: new Date() } )

必须引用data_numberlong的参数以避免潜在的准确性损失。

使用mongoexport导出数据:

mongoexport --db test --collection traffic --out traffic.json

导出的数据位于严格模式表示中,以保留类型信息:

{ "_id" : 1, "volume" : { "$numberLong" : "2980000" }, "date" : { "$date" : "2014-03-13T13:47:42.483-0400" } }

有关这些类型及其使用的表示形式的完整列表,请参见MongoDB 扩展 JSON

Required Access

mongoexport要求对目标数据库具有读访问权限。

确保连接的用户至少在目标数据库上拥有read角色。

连接到强制Authenticationmongodmongos时,请确保您基于配置的authentication mechanism使用必需的安全性参数。

Read Preference

连接到mongosreplica set时,mongoexport默认为primary read preference

您可以使用--readPreference选项覆盖默认的读取首选项。

Important

mongos上使用非主要读取首选项可能会导致数据不一致,包括重复或缺少文档。

Options

在 3.0.0 版中进行了更改:mongoexport删除了--dbpath以及相关的--directoryperdb--journal选项。要使用mongoexport,您必须根据需要对正在运行的mongodmongos实例运行mongoexport

在 3.0.0 版中进行了更改:mongoexport删除了--csv选项。使用--type=csv选项为输出指定 CSV 格式。

此选项禁止显示:

指定可解析的URI 连接字符串以连接到 MongoDB 部署。

--uri "mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"

有关连接字符串的组成部分的更多信息,请参见连接字符串 URI 格式文档。

Important

以下命令行选项不能与--uri选项一起使用:

而是将这些选项指定为--uri连接字符串的一部分。

指定要连接的mongod的可解析主机名。默认情况下, mongoexport 尝试连接到端口号27017上在 localhost 上运行的 MongoDB 实例。

要连接到副本集,请指定replSetName以及集合成员的种子列表,如下所示:

--host <replSetName>/<hostname1><:port>,<hostname2><:port>,<...>

指定副本集列表格式时, mongoexport 始终连接到primary

您还可以通过指定仅该成员的主机和端口来连接到副本集的任何单个成员:

--host <hostname1><:port>

在 3.0.0 版中进行了更改:如果您使用 IPv6 并使用<address>:<port>格式,则必须将地址和端口组合的一部分括在方括号(例如[<address>])中。

Note

您不能同时指定--host--uri

指定 MongoDB 实例在其上侦听 Client 端连接的 TCP 端口。

Note

您不能同时指定--port--uri

启用 IPv6 支持,并允许 mongoexport 使用 IPv6 网络连接到 MongoDB 实例。在 MongoDB 3.0 之前,您必须指定--ipv6才能使用 IPv6.在 MongoDB 3.0 和更高版本中,始终启用 IPv6.

启用与启用了 TLS/SSL 支持的mongodmongos的连接。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

从 3.4 版开始,如果未指定--sslCAFilessl.CAFile并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

Warning

版本 3.2 及更早版本: 对于与mongodmongos的 TLS/SSL 连接(--ssl),如果 mongoexport 在没有--sslCAFile的情况下运行,则 mongoexport 不会尝试验证服务器证书。这会导致已过期的mongodmongos证书以及冒充有效mongodmongos实例的外部进程的漏洞。确保始终指定 CA 文件以在可能进行入侵的情况下验证服务器证书。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定同时包含 TLS/SSL 证书和密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificatesmongodmongos时,此选项是必需的。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定用于解密证书密钥文件的密码(即--sslPEMKeyFile)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongoexport 都会从所有日志记录和报告输出中删除密码。

如果 PEM 文件中的私钥已加密并且您未指定--sslPEMKeyPassword选项,则 mongoexport 将提示您 Importing 密码。参见TLS/SSL 证书密码短语

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定包含证书吊销列表的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

绕过服务器证书的验证检查,并允许使用无效的证书。使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。

从 MongoDB 3.6.6 开始,如果在使用 x.509 身份验证时指定--sslAllowInvalidCertificatesssl.allowInvalidCertificates: true,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。

Warning

对于与mongodmongos的 TLS/SSL 连接,请尽可能避免使用--sslAllowInvalidCertificates,并且仅在不可能进行入侵的系统上使用--sslAllowInvalidCertificates

如果mongo shell(和其他MongoDB Tools)与--sslAllowInvalidCertificates选项一起运行,则mongo shell(和其他MongoDB Tools)将不会尝试验证服务器证书。这对过期的mongodmongos证书以及冒充有效的mongodmongos实例的外部进程造成了漏洞。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

禁用 TLS/SSL 证书中的主机名验证。允许 mongoexport 连接到 MongoDB 实例,即使其证书中的主机名与指定的主机名不匹配也是如此。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指示 mongoexport 使用已安装的 OpenSSL 库的 FIPS 模式。您的系统必须具有符合 FIPS 的 OpenSSL 库,才能使用--sslFIPSMode选项。

Note

兼容 FIPS 的 TLS/SSL 仅在MongoDB Enterprise中可用。有关更多信息,请参见为 FIPS 配置 MongoDB

Note

您不能同时指定--username--uri

在版本 3.0.2 中进行了更改:要提示用户 Importing 密码,请传递不带--password--username选项,或者像--password ""一样将空字符串指定为--password值。

Note

您不能同时指定--password--uri

Note

您不能同时指定--authenticationDatabase--uri

如果未指定身份验证数据库,则 mongoexport 假定指定要导出的数据库包含用户的凭据。

在 2.6 版中进行了更改:添加了对PLAINMONGODB-X509身份验证机制的支持。

在版本 3.0 中进行了更改:添加了对SCRAM-SHA-1身份验证机制的支持。将默认机制更改为SCRAM-SHA-1

指定 mongoexport 实例用于对mongodmongos进行身份验证的身份验证机制。

Value Description
SCRAM-SHA-1 RFC 5802使用 SHA1 哈希函数的标准咸化挑战响应身份验证机制。
MONGODB-CR MongoDB 质询/响应身份验证。 (* MongoDB 3.6 中已弃用*)
MONGODB-X509 MongoDB TLS/SSL 证书认证。
GSSAPI (Kerberos) 使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
PLAIN(LDAP SASL) 使用 LDAP 的外部身份验证。您也可以使用PLAIN对数据库中的用户进行身份验证。 PLAIN以纯文本形式传输密码。此机制仅在MongoDB Enterprise中可用。

Note

您不能同时指定--authenticationMechanism--uri

使用GSSAPI/Kerberos指定服务的名称。仅当服务未使用默认名称mongodb时才需要。

此选项仅在 MongoDB Enterprise 中可用。

使用GSSAPI/Kerberos指定服务的主机名。 如果计算机的主机名与 DNS 解析的主机名不匹配。

此选项仅在 MongoDB Enterprise 中可用。

Note

您不能同时指定--db--uri

如果您的任何字段名称包含空格,请使用引号将字段列表括起来。例如,如果您希望导出两个字段phoneuser number,则可以指定--fields "phone,user number"

对于csv输出格式,mongoexport仅包含指定的字段,并且指定的字段可以是子文档中的字段。

对于JSON输出格式,mongoexport仅包含指定字段**和_id字段,并且如果指定字段是子文档中的字段,则mongoexport包括该子文档及其所有子字段字段,而不仅仅是文档中的指定字段。

有关示例用法,请参见:使用--fields 选项以 CSV 格式导出数据

mongoexport仅包含指定的字段。指定的字段可以是子文档内的字段。

有关用法示例,请参见使用文件指定要以 CSV 格式导出的字段

您必须将查询文档括在单引号('{ ... }')中,以确保它不会与 Shell 环境交互。

例如,给定数据库test中名为records的集合,其中包含以下文档:

{ "_id" : ObjectId("51f0188846a64a1ed98fde7c"), "a" : 1, "date" : ISODate("1960-05-01T00:00:00Z") }
{ "_id" : ObjectId("520e61b0c6646578e3661b59"), "a" : 1, "b" : 2, "date" : ISODate("1970-05-01T00:00:00Z") }
{ "_id" : ObjectId("520e642bb7fa4ea22d6b1871"), "a" : 2, "b" : 3, "c" : 5, "date" : ISODate("2010-05-01T00:00:00Z") }
{ "_id" : ObjectId("520e6431b7fa4ea22d6b1872"), "a" : 3, "b" : 3, "c" : 6, "date" : ISODate("2015-05-02T00:00:00Z") }
{ "_id" : ObjectId("520e6445b7fa4ea22d6b1873"), "a" : 5, "b" : 6, "c" : 8, "date" : ISODate("2018-03-01T00:00:00Z") }
{ "_id" : ObjectId("5cd0de910dbce4346295ae28"), "a" : 15, "b" : 5, "date" : ISODate("2015-03-01T00:00:00Z") }

以下mongoexport使用-q选项仅将字段a大于或等于($gte)导出到3并且字段date小于ISODate("2016-01-01T00:00:00Z")的文档(使用日期的严格格式\ { "$date": "YYYY-MM-DDTHH:mm:ss.mmm<offset>"}):

mongoexport -d test -c records -q '{ a: { $gte: 3 }, date: { $lt: { "$date": "2016-01-01T00:00:00.000Z" } } }' --out exportdir/myRecords.json

生成的文件包含以下文档:

{"_id":{"$oid":"520e6431b7fa4ea22d6b1872"},"a":3.0,"b":3.0,"c":6.0,"date":{"$date":"2015-05-02T00:00:00Z"}}
{"_id":{"$oid":"5cd0de910dbce4346295ae28"},"a":15.0,"b":5.0,"date":{"$date":"2015-03-01T00:00:00Z"}}

您可以使用--sort选项和mongoexport对结果进行排序。

3.0 版中的新功能。

指定要导出的文件类型。为CSV格式指定csv或为JSON格式指定json

如果指定csv,则还必须使用--fields--fieldFile选项声明要从集合中导出的字段。

以漂亮的打印格式 JSON 输出文档。

默认情况下, mongoexport 包含导出的字段名称作为 CSV 输出的第一行。 --noHeaderLine指示 mongoexport 导出不包含字段名称列表的数据。 --noHeaderLine仅对--type选项值为csv有效。

有关用法示例,请参见从 CSV 输出中排除字段名称

Read Preference设置为nearest,从而允许mongoexport从辅助replica set成员读取数据。

--readPreference替换了 MongoDB 3.2 中的--slaveOk。如果指定--readPreference,则不能指定--slaveOk

Warning

primary以外的read preferencemongos连接使用时,可能会导致不一致,重复或丢失文档的情况。

See 读取首选项模式.

连接到mongosreplica set时, mongoexport 默认为primary read preference

否则, mongoexport 默认为nearest

Warning

primary以外的read preferencemongos连接使用时,可能会导致不一致,重复或丢失文档的情况。

当您使用--forceTableScan运行时,如果写操作与该操作交错以使文档移动,则mongoexport可能会多次返回文档。

Warning

使用--forceTableScan时要格外谨慎。

--sort--skip--limit结合使用可限制导出文档的数量。

mongoexport -d test -c records --sort '{a: 1}' --limit 100 --out export.0.json
mongoexport -d test -c records --sort '{a: 1}' --limit 100 --skip 100 --out export.1.json
mongoexport -d test -c records --sort '{a: 1}' --limit 100 --skip 200 --out export.2.json

有关基础操作的信息,请参见sort()

Examples

以 CSV 格式导出

在 3.0.0 版中进行了更改:mongoexport删除了--csv选项。使用--type=csv选项为输出指定 CSV 格式。

使用--fields 选项以 CSV 格式导出数据

在以下示例中,mongoexportCSV格式将users数据库中的contacts集合中的数据导出到文件/opt/backups/contacts.csv中。

mongoexport连接到的mongod实例正在 localhost 端口号27017上运行。

以 CSV 格式导出时,必须在文档中指定要导出的字段。该操作指定要导出的nameaddress字段。

mongoexport --db users --collection contacts --type=csv --fields name,address --out /opt/backups/contacts.csv

输出将类似于:

name, address
Sophie Monroe, 123 Example Road
Charles Yu, 345 Sample Street

使用文件指定要以 CSV 格式导出的字段

仅对于 CSV 导出,您还可以在文件中指定包含要导出的字段的行分隔列表的字段。该文件每行只能有一个字段。

例如,您可以在文件fields.txt中指定nameaddress字段:

name
address

然后,使用--fieldFile选项,指定要与文件一起导出的字段:

mongoexport --db users --collection contacts --type=csv --fieldFile fields.txt --out /opt/backups/contacts.csv

从 CSV 输出中排除字段名称

3.4 版的新功能。

MongoDB 3.4 添加了--noHeaderLine选项,以排除 CSV 导出中的字段名称。下面的示例导出users数据库中contacts集合中的nameaddress字段,并使用--noHeaderLine禁止显示字段名作为第一行:

mongoexport --db users --collection contacts --type csv --fields name,address --noHeaderLine --out /opt/backups/contacts.csv

CSV 输出将类似于:

Sophie Monroe, 123 Example Road
Charles Yu, 345 Sample Street

以 JSON 格式导出

本示例从在 localhost 端口号27017上运行的 MongoDB 实例创建contacts集合的导出。这会将导出以JSON格式写入contacts.json文件。

mongoexport --db sales --collection contacts --out contacts.json

从运行身份验证的远程主机导出

以下示例从需要身份验证的远程 MongoDB 实例导出marketing数据库中的contacts集合。

Specify the:

Tip

忽略--password选项,要求mongoexport提示 Importing 密码:

mongoexport --host mongodb1.example.net --port 27017 --username someUser --authenticationDatabase admin --collection contacts --db marketing --out mdb1-examplenet.json

或者,您可以使用--uri选项来指定主机,端口,用户名,身份验证数据库和数据库。

Tip

省略 URI 字符串中的密码以提示mongoexport提示 Importing 密码:

mongoexport --uri 'mongodb://someUser@mongodb0.example.com:27017/marketing?authsource=admin' --collection contacts --out mdb1-examplenet.json

导出查询结果

您可以通过为查询过滤器提供--query选项来仅导出查询结果,并使用“ --db”选项将结果限制为单个数据库。

例如,此命令返回sales数据库的contacts集合中的所有文档,其中包含名为dept等于"ABC"且字段date大于或等于 ISODate(“ 2018-01-01”)(使用日期的严格格式\ { "$date": "YYYY-MM-DDTHH:mm:ss.mmm<offset>"})

mongoexport --db sales --collection contacts --query '{"dept": "ABC", date: { $gte: { "$date": "2018-01-01T00:00:00.000Z" } }}'

您必须将查询文档括在单引号('{ ... }')中,以确保它不会与 Shell 环境交互。

首页