On this page
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
避免将mongoimport和mongoexport用于完整实例生产备份。它们不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示 BSON 支持的类型的子集。如MongoDB 备份方法中所述,使用mongodump和mongorestore来实现这种功能。
mongoexport必须直接从系统命令行运行。
为了保留类型信息,mongoexport和mongoimport对某些类型使用严格模式表示。
例如,以下在mongo shell 中的插入操作将Shell 模式表示用于 BSON 类型data_date和data_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角色。
连接到强制Authentication的mongod或mongos时,请确保您基于配置的authentication mechanism使用必需的安全性参数。
Read Preference
连接到mongos或replica set时,mongoexport默认为primary read preference。
您可以使用--readPreference选项覆盖默认的读取首选项。
Important
在mongos上使用非主要读取首选项可能会导致数据不一致,包括重复或缺少文档。
Options
在 3.0.0 版中进行了更改:mongoexport删除了--dbpath
以及相关的--directoryperdb
和--journal
选项。要使用mongoexport,您必须根据需要对正在运行的mongod或mongos实例运行mongoexport。
在 3.0.0 版中进行了更改:mongoexport删除了--csv
选项。使用--type=csv选项为输出指定 CSV 格式。
mongoexport
--help
``- 返回有关 mongoexport 的选项和使用的信息。
--verbose
`,` `-v`
- 增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含该选项(例如
-vvvvv
)来提高-v
形式的详细程度。
- 增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含该选项(例如
--quiet
``- 在安静模式下运行 mongoexport ,以尝试限制输出量。
此选项禁止显示:
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
--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>]
)中。
--port
<port>
- 默认:27017
指定 MongoDB 实例在其上侦听 Client 端连接的 TCP 端口。
--ipv6
``- 已在 3.0 版中删除.
启用 IPv6 支持,并允许 mongoexport 使用 IPv6 网络连接到 MongoDB 实例。在 MongoDB 3.0 之前,您必须指定--ipv6才能使用 IPv6.在 MongoDB 3.0 和更高版本中,始终启用 IPv6.
--ssl
``- 2.6 版的新功能。
启用与启用了 TLS/SSL 支持的mongod或mongos的连接。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslCAFile
<filename>
- 2.6 版的新功能。
指定包含来自证书颁发机构的根证书链的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
从 3.4 版开始,如果未指定--sslCAFile
或ssl.CAFile
并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。
如果使用 x.509 身份验证,则必须指定--sslCAFile
或ssl.CAFile
。
Warning
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslPEMKeyFile
<filename>
- 2.6 版的新功能。
指定同时包含 TLS/SSL 证书和密钥的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificates的mongod或mongos时,此选项是必需的。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslPEMKeyPassword
<value>
- 2.6 版的新功能。
指定用于解密证书密钥文件的密码(即--sslPEMKeyFile)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongoexport 都会从所有日志记录和报告输出中删除密码。
如果 PEM 文件中的私钥已加密并且您未指定--sslPEMKeyPassword选项,则 mongoexport 将提示您 Importing 密码。参见TLS/SSL 证书密码短语。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslCRLFile
<filename>
- 2.6 版的新功能。
指定包含证书吊销列表的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslAllowInvalidCertificates
``- 2.6 版的新功能。
绕过服务器证书的验证检查,并允许使用无效的证书。使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。
从 MongoDB 3.6.6 开始,如果在使用 x.509 身份验证时指定--sslAllowInvalidCertificates
或ssl.allowInvalidCertificates: true
,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。
Warning
对于与mongod和mongos的 TLS/SSL 连接,请尽可能避免使用--sslAllowInvalidCertificates
,并且仅在不可能进行入侵的系统上使用--sslAllowInvalidCertificates
。
如果mongo shell(和其他MongoDB Tools)与--sslAllowInvalidCertificates
选项一起运行,则mongo shell(和其他MongoDB Tools)将不会尝试验证服务器证书。这对过期的mongod和mongos证书以及冒充有效的mongod或mongos实例的外部进程造成了漏洞。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslAllowInvalidHostnames
``- 3.0 版中的新功能。
禁用 TLS/SSL 证书中的主机名验证。允许 mongoexport 连接到 MongoDB 实例,即使其证书中的主机名与指定的主机名不匹配也是如此。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslFIPSMode
``- 2.6 版的新功能。
指示 mongoexport 使用已安装的 OpenSSL 库的 FIPS 模式。您的系统必须具有符合 FIPS 的 OpenSSL 库,才能使用--sslFIPSMode选项。
Note
兼容 FIPS 的 TLS/SSL 仅在MongoDB Enterprise中可用。有关更多信息,请参见为 FIPS 配置 MongoDB。
--username
<username>
,
-u
<username>
- 指定用于对使用身份验证的 MongoDB 数据库进行身份验证的用户名。与--password和--authenticationDatabase选项结合使用。
Note
您不能同时指定--username和--uri。
--password
<password>
,
-p
<password>
- 指定用于对使用身份验证的 MongoDB 数据库进行身份验证的密码。与--username和--authenticationDatabase选项结合使用。
在版本 3.0.2 中进行了更改:要提示用户 Importing 密码,请传递不带--password的--username选项,或者像--password ""
一样将空字符串指定为--password值。
Note
您不能同时指定--password和--uri。
--authenticationDatabase
<dbname>
- 指定已在其中创建指定的--username的身份验证数据库。参见Authentication Database。
Note
您不能同时指定--authenticationDatabase和--uri。
如果未指定身份验证数据库,则 mongoexport 假定指定要导出的数据库包含用户的凭据。
--authenticationMechanism
<name>
- 默认:SCRAM-SHA-1
在 2.6 版中进行了更改:添加了对PLAIN
和MONGODB-X509
身份验证机制的支持。
在版本 3.0 中进行了更改:添加了对SCRAM-SHA-1
身份验证机制的支持。将默认机制更改为SCRAM-SHA-1
。
指定 mongoexport 实例用于对mongod或mongos进行身份验证的身份验证机制。
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。
--gssapiServiceName
``- 2.6 版的新功能。
使用GSSAPI/Kerberos指定服务的名称。仅当服务未使用默认名称mongodb
时才需要。
此选项仅在 MongoDB Enterprise 中可用。
--gssapiHostName
``- 2.6 版的新功能。
使用GSSAPI/Kerberos指定服务的主机名。 仅如果计算机的主机名与 DNS 解析的主机名不匹配。
此选项仅在 MongoDB Enterprise 中可用。
--db
<database>
,
-d
<database>
- 指定要在其上运行 mongoexport 的数据库的名称。
--collection
<collection>
,
-c
<collection>
- 指定要导出的集合。
--fields
<field1[,field2]>
,
-f
<field1[,field2]>
- 指定要在导出中“包括”的一个或多个字段。使用逗号分隔的字段列表来指定多个字段。
如果您的任何字段名称包含空格,请使用引号将字段列表括起来。例如,如果您希望导出两个字段phone
和user number
,则可以指定--fields "phone,user number"
。
对于csv输出格式,mongoexport仅包含指定的字段,并且指定的字段可以是子文档中的字段。
对于JSON输出格式,mongoexport仅包含指定字段**和_id
字段,并且如果指定字段是子文档中的字段,则mongoexport包括该子文档及其所有子字段字段,而不仅仅是文档中的指定字段。
有关示例用法,请参见:使用--fields 选项以 CSV 格式导出数据。
--fieldFile
<filename>
- 替代--fields。 --fieldFile选项允许您在文件中指定要在导出中* include *的一个或多个字段,并且--type选项的值为
csv
唯一有效。该文件每行只能有一个字段,并且该行必须以 LF 字符(0x0A
)结尾。
- 替代--fields。 --fieldFile选项允许您在文件中指定要在导出中* include *的一个或多个字段,并且--type选项的值为
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
)。
- 指定要写入导出的文件。如果您未指定文件名,则mongoexport将数据写入标准输出(例如
--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 preference与mongos连接使用时,可能会导致不一致,重复或丢失文档的情况。
--readPreference
<string>
- 为 mongoexport 指定read preference。
See 读取首选项模式.
连接到mongos或replica set时, mongoexport 默认为primary read preference。
否则, mongoexport 默认为nearest。
Warning
将primary以外的read preference与mongos连接使用时,可能会导致不一致,重复或丢失文档的情况。
--forceTableScan
``- 强制mongoexport直接扫描数据存储,而不是遍历
_id
字段索引。使用--forceTableScan跳过索引。通常,在两种情况下,此行为优于默认行为:
- 强制mongoexport直接扫描数据存储,而不是遍历
如果密钥大小超过 800 个字节,则
_id
索引中将不存在。您的数据库使用自定义
_id
字段。
当您使用--forceTableScan运行时,如果写操作与该操作交错以使文档移动,则mongoexport可能会多次返回文档。
Warning
使用--forceTableScan时要格外谨慎。
--skip
<number>
- 使用--skip控制mongoexport从何处开始导出文档。有关基础操作的信息,请参见skip()。
--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 格式导出数据
在以下示例中,mongoexport以CSV格式将users
数据库中的contacts
集合中的数据导出到文件/opt/backups/contacts.csv
中。
mongoexport连接到的mongod实例正在 localhost 端口号27017
上运行。
以 CSV 格式导出时,必须在文档中指定要导出的字段。该操作指定要导出的name
和address
字段。
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
中指定name
和address
字段:
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
集合中的name
和address
字段,并使用--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 环境交互。