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 格式。

  • mongoexport

  • --help ``

    • 返回有关 mongoexport 的选项和使用的信息。
  • --verbose `,` `-v`

    • 增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含该选项(例如-vvvvv)来提高-v形式的详细程度。
  • --quiet ``

    • 在安静模式下运行 mongoexport ,以尝试限制输出量。

此选项禁止显示:

  • database commands的输出

  • replication activity

  • 连接接受的事件

  • 连接关闭事件

  • --version ``

    • 返回 mongoexport 版本号。
  • --uri <connectionString>

    • 3.4.6 版中的新功能。

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

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

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

Important

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

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

  • --host <hostname><:port> , -h <hostname><:port>
    • 默认:localhost:27017

指定要连接的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

  • --port <port>
    • 默认:27017

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

Note

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

  • --ipv6 ``
    • 已在 3.0 版中删除.

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

  • --ssl ``
    • 2.6 版的新功能。

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

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

  • --sslCAFile <filename>
    • 2.6 版的新功能。

指定包含来自证书颁发机构的根证书链的.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 配置

  • --sslPEMKeyFile <filename>
    • 2.6 版的新功能。

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

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

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

  • --sslPEMKeyPassword <value>
    • 2.6 版的新功能。

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

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

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

  • --sslCRLFile <filename>
    • 2.6 版的新功能。

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

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

  • --sslAllowInvalidCertificates ``
    • 2.6 版的新功能。

绕过服务器证书的验证检查,并允许使用无效的证书。使用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 配置

  • --sslAllowInvalidHostnames ``
    • 3.0 版中的新功能。

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

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

  • --sslFIPSMode ``
    • 2.6 版的新功能。

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

Note

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

  • --username <username> , -u <username>

Note

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

  • --password <password> , -p <password>

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

Note

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

Note

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

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

  • --authenticationMechanism <name>
    • 默认:SCRAM-SHA-1

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

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

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

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

Note

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

  • --gssapiServiceName ``
    • 2.6 版的新功能。

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

此选项仅在 MongoDB Enterprise 中可用。

  • --gssapiHostName ``
    • 2.6 版的新功能。

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

此选项仅在 MongoDB Enterprise 中可用。

  • --db <database> , -d <database>
    • 指定要在其上运行 mongoexport 的数据库的名称。

Note

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

  • --collection <collection> , -c <collection>

    • 指定要导出的集合。
  • --fields <field1[,field2]> , -f <field1[,field2]>

    • 指定要在导出中“包括”的一个或多个字段。使用逗号分隔的字段列表来指定多个字段。

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

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

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

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

  • --fieldFile <filename>
    • 替代--fields--fieldFile选项允许您在文件中指定要在导出中* include *的一个或多个字段,并且--type选项的值为csv唯一有效。该文件每行只能有一个字段,并且该行必须以 LF 字符(0x0A)结尾。

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

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

  • --query <JSON> , -q <JSON>
    • 提供一个查询,其名称为JSON document(用引号引起来)以在导出中返回匹配的文档。在strict format中指定 JSON。

您必须将查询文档括在单引号('{ ... }')中,以确保它不会与 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对结果进行排序。

  • --type <string>
    • 默认:json

3.0 版中的新功能。

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

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

  • --out <file> , -o <file>

    • 指定要写入导出的文件。如果您未指定文件名,则mongoexport将数据写入标准输出(例如stdout)。
  • --jsonArray ``

    • 修改mongoexport的输出,以将导出的全部内容写为单个JSON数组。默认情况下,mongoexport为每个 MongoDB 文档使用一个 JSON 文档写入数据。
  • --pretty ``

    • 3.0.0 版中的新功能。

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

  • --noHeaderLine ``
    • 3.4 版的新功能。

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

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

  • --slaveOk `,` `-k`
    • 从 3.2 版开始不推荐使用。

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直接扫描数据存储,而不是遍历_id字段索引。使用--forceTableScan跳过索引。通常,在两种情况下,此行为优于默认行为:
  • 如果密钥大小超过 800 个字节,则_id索引中将不存在。

  • 您的数据库使用自定义_id字段。

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

Warning

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

  • --skip <number>

  • --limit <number>

    • 指定要包含在导出中的最大文档数。有关基础操作的信息,请参见limit()
  • --sort <JSON>

    • 指定导出结果的 Sequences。如果不存在可以支持排序操作的索引,则结果必须小于 32 兆字节。

--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 环境交互。