mongoexport
本文档适用于mongoexport
的版本100.10.0
。
摘要
mongoexport
是一个数据库工具,可以从 MongoDB 实例中导出 JSON 或 CSV 数据。
请在系统命令行中运行 mongoexport
,而不是在mongo
命令行界面中。
mongoexport
不是一个用于备份部署的工具。如果您想创建备份解决方案,请参阅 使用 MongoDB 工具备份和恢复自托管部署。
注意
如果您正在存档过时数据以节省存储成本,请考虑在 在线存档 中存档,该存档位于 MongoDB Atlas。在线存档自动将不常访问的数据存档到完全管理的 S3 存储桶中,以实现成本效益的数据分层。
您可以使用 MongoDB 数据库工具将自托管部署迁移到 MongoDB Atlas。MongoDB Atlas 是云中 MongoDB 部署的全托管服务。要了解更多信息,请参阅 使用 mongorestore 进行初始化。
要了解迁移到 MongoDB Atlas 的所有方法,请参阅 迁移或导入数据。
语法
mongoexport
语法
mongoexport --collection=<coll> <options> <connection-string>
您必须指定要导出的 集合
。如果您没有指定 输出文件
,则 mongoexport
将写入标准输出(例如 stdout)。
连接到MongoDB实例
要连接到本地运行在端口27017的MongoDB实例,您无需指定主机或端口。
例如,要将指定集合
从本地运行在端口27017的MongoDB实例导出到指定的输出文件
mongoexport --collection=events --db=reporting --out=events.json
要指定MongoDB实例的主机地址和/或端口,您可以
在
--uri
连接字符串中指定主机名和端口:mongoexport --uri="mongodb://mongodb0.example.com:27017/reporting" --collection=events --out=events.json [additional options] 当使用
--uri
连接字符串时,数据库可以指定为字符串的一部分。在
--host
中指定主机名和端口:mongoexport --host="mongodb0.example.com:27017" --collection=events --db=reporting --out=events.json [additional options] mongoexport --host="mongodb0.example.com" --port=27017 --collection=events --db=reporting --out=events.json [additional options]
有关可用选项的更多信息,请参阅选项。
连接到副本集
注意
mongoexport
不是一个用于备份数据的工具。要备份副本集,请参阅使用 MongoDB 工具备份和恢复自管理的部署。
要连接到副本集以导出其数据,您可以:
在
--uri
连接字符串 中指定副本集名称和成员:mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName" --collection=events --out=events.json [additional options] 当使用
--uri
连接字符串时,数据库可以指定为字符串的一部分。在
--host
中指定副本集名称和成员:mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com" --collection=events --db=reporting --out=events.json [additional options]
默认情况下,mongoexport
从副本集的主节点读取。要覆盖默认设置,您可以指定读取偏好:
您可以在
--uri
连接字符串中指定读取偏好:mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName&readPreference=secondary" --collection=events --out=events.json [additional options] 如果指定读取偏好标记,请包括
readPreferenceTags
选项mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName&readPreference=secondary&readPreferenceTags=region:east" --collection=events --out=events.json [additional options] 当使用
--uri
连接字符串时,数据库可以指定为字符串的一部分。您可以使用
--readPreference
命令行选项来指定读取偏好。如果只指定读取偏好模式,命令行选项接受一个字符串:mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference=secondary --collection=events --db=reporting --out=events.json [additional options] 或者,命令行选项可以接受一个引号括起来的文档
'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds:<num>}'
来指定模式、可选的读取偏好标记集 和可选的 maxStalenessSeconds:mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' --collection=events --db=reporting --out=events.json [additional options]
有关可用选项的更多信息,请参阅选项。
连接到分片集群
注意
mongoexport
不是一个用于备份数据的工具。要备份您的分片集群,请参阅备份和恢复自管理的分片集群。
要连接到分片集群以导出其数据,您可以:
在
mongos
实例的--uri
连接字符串中指定mongos
的主机名mongoexport --uri="mongodb://mongos0.example.com:27017/reporting" --collection=events --out=events.json [additional options] 当使用
--uri
连接字符串时,数据库可以指定为字符串的一部分。mongoexport --host="mongos0.example.com:27017" --collection=events --db=reporting --out=events.json[additional options]
默认情况下,mongoexport
从分片副本集的主节点读取。要覆盖默认设置,可以指定以下读取偏好:
您可以在
--uri
连接字符串中指定读取偏好:mongoexport --uri="mongodb://mongos0.example.com:27017/reporting?readPreference=secondary" --collection=events --out=events.json [additional options] 如果指定读取偏好标记,请包括
readPreferenceTags
选项mongoexport --uri="mongodb://mongos0.example.com:27017/reporting?readPreference=secondary&readPreferenceTags=region:east" --collection=events --out=events.json [additional options] 当使用
--uri
连接字符串时,数据库可以指定为字符串的一部分。您可以使用
--readPreference
命令行选项来指定读取偏好。如果只指定读取偏好模式,命令行选项接受一个字符串:mongoexport --host="mongos0.example.com:27017" --readPreference=secondary --collection=events --db=reporting --out=events.json [additional options] 或者,命令行选项可以接受一个引号括起来的文档
'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds:<num>}'
来指定模式、可选的读取偏好标记集 和可选的 maxStalenessSeconds:mongoexport --host="mongos0.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' --collection=events --db=reporting --out=events.json [additional options]
选项
--quiet
以安静模式运行
mongoexport
,尝试限制输出量。此选项抑制
数据库命令的输出
复制活动
连接接受和关闭事件
所有日志,包括错误消息,除了在解析选项时发生的那些
--config=<filename>
新在版本100.3.0.
指定包含以下
mongoexport
选项敏感值的 YAML 配置文件的完整路径这是指定密码到
mongoexport
的推荐方式,除了通过密码提示指定之外。配置文件采用以下形式
password: <password> uri: mongodb://mongodb0.example.com:27017 sslPEMKeyPassword: <password> 将密码指定到
password:
字段,并在uri:
字段提供一个包含冲突密码的连接字符串会导致错误。请确保使用适当的文件系统权限来保护此文件。
注意
如果您使用
--config
指定配置文件,并且还使用--password
、--uri
或--sslPEMKeyPassword
选项来指定mongoexport
,则每个命令行选项将覆盖配置文件中对应的选项。
--uri=<connectionString>
指定 MongoDB 部署的解析 URI 连接字符串,用引号括起来
--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" 从
mongoexport
的版本100.0
开始,连接字符串可以作为一个位置参数提供,而不使用--uri
选项mongoexport mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 作为一个位置参数,连接字符串可以指定在命令行的任何位置,只要它以
mongodb://
或mongodb+srv://
开头。例如mongoexport --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl 只能提供一个连接字符串。尝试包含多个,无论是使用
--uri
选项还是作为一个位置参数,都会导致错误。有关连接字符串组件的信息,请参阅 连接字符串 URI 格式 文档。
注意
连接字符串中的某些组件可以使用它们自己的显式命令行选项进行指定,例如
--username
和--password
。在提供连接字符串的同时使用显式选项并指定冲突信息会导致错误。注意
如果在Ubuntu 18.04上使用
mongoexport
,当使用带有 SRV连接字符串(形式为mongodb+srv://
)的--uri
选项时,您可能会遇到cannot unmarshal DNS
错误信息。如果是这样,请尝试以下选项之一使用带有
--uri
选项的非SRV连接字符串(形式为mongodb://
)使用
--host
选项直接指定要连接的主机
警告
在某些系统上,使用
--uri
选项提供的密码可能会被系统状态程序(如ps
)看到,这些程序可能由其他用户调用。考虑以下替代方案在连接字符串中省略密码以接收交互式密码提示,或者
使用
--config
选项指定包含密码的配置文件。
--host=<hostname><:port>, -h=<hostname><:port>
默认值: localhost:27017
指定MongoDB部署的可解析主机名。默认情况下,
mongoexport
尝试连接到运行在本机上的MongoDB实例,端口号为27017
。要连接到副本集,指定
replSetName
和副本集成员的种子列表,如下所示--host=<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> 当指定副本集列表格式时,
mongoexport
始终连接到 主节点。您也可以通过指定副本集中的单个成员的主机和端口来连接到该成员
--host=<hostname1><:port> 如果您使用IPv6并且使用
<address>:<port>
格式,必须在地址和端口号组合的部分加上括号(例如[<address>]
)。
--ssl
启用与启用了TLS/SSL支持的
mongod
或mongos
的连接。此外,您也可以直接在
URI连接字符串
中配置TLS/SSL支持。在使用--ssl
的同时提供连接字符串并指定冲突信息将导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--sslCAFile=<filename>
指定包含证书颁发机构根证书链的
.pem
文件。使用相对路径或绝对路径指定.pem
文件名。或者,您也可以在
URI 连接字符串
中直接指定.pem
文件。在使用--sslCAFile
并指定冲突信息时,将会导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--sslPEMKeyFile=<filename>
指定包含 TLS/SSL 证书和私钥的
.pem
文件。使用相对路径或绝对路径指定.pem
文件名。当使用
--ssl
选项连接到启用了CAFile
而未启用allowConnectionsWithoutCertificates
的mongod
或mongos
时,此选项是必需的。或者,您也可以直接在
URI 连接字符串
中指定.pem
文件。如果同时使用--sslPEMKeyFile
并指定冲突信息,将会导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--sslPEMKeyPassword=<value>
指定解密证书密钥文件的密码(即
--sslPEMKeyFile
)。只有在证书密钥文件被加密的情况下才使用--sslPEMKeyPassword
选项。在所有情况下,mongoexport
都将从所有日志和报告输出中删除密码。如果 PEM 文件中的私钥被加密并且您没有指定
--sslPEMKeyPassword
选项,mongoexport
将会提示输入口令短语。参见 TLS/SSL 证书口令短语。或者,您也可以直接在
URI 连接字符串
中指定密码。如果同时使用--sslPEMKeyPassword
并指定冲突信息,将会导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
警告
在某些系统上,使用
--sslPEMKeyPassword
--sslPEMKeyPassword
选项直接提供的密码可能对系统状态程序(如ps
)可见,这些程序可能由其他用户调用。请考虑使用--config
--config
选项来指定包含密码的配置文件。
--sslCRLFile=<filename>
指定包含证书吊销列表的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--sslAllowInvalidCertificates
绕过服务器证书的验证检查,允许使用无效证书。当使用
allowInvalidCertificates
allowInvalidCertificates
设置时,MongoDB将记录无效证书的使用情况作为警告。警告
或者,您也可以在
URI 连接字符串
中直接禁用证书验证。在同时使用--sslAllowInvalidCertificates
并指定冲突信息时提供连接字符串将导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--sslAllowInvalidHostnames
禁用 TLS/SSL 证书中主机名的验证。允许
mongoexport
连接到 MongoDB 实例,即使它们的证书中的主机名与指定的主机名不匹配。或者,您也可以在
URI 连接字符串
中直接禁用主机名验证。在同时使用--sslAllowInvalidHostnames
并指定冲突信息时提供连接字符串将导致错误。有关TLS/SSL和MongoDB的更多信息,请参阅为mongod和mongos配置TLS/SSL和客户端TLS/SSL配置。
--username=<username>, -u=<username>
指定用于验证连接到使用身份验证的 MongoDB 数据库的用户名。与
--password
和--authenticationDatabase
选项一起使用。或者,您也可以直接在
URI连接字符串
中指定用户名。在同时使用--username
并指定冲突信息时,将导致错误。如果您使用
MONGODB-AWS
认证机制
连接到MongoDB Atlas集群,可以在此字段中指定您的AWS访问密钥ID,
连接字符串
中,或者在
AWS_ACCESS_KEY_ID
环境变量中。
有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
--password=<password>, -p=<password>
指定用于认证使用认证的MongoDB数据库的密码。与
--username
和--authenticationDatabase
选项一起使用。要提示用户输入密码,请使用不带
--password
的--username
选项,或者将空字符串指定为--password
的值,例如--password ""
。或者,您也可以直接在
URI连接字符串
中指定密码。同时提供连接字符串并使用--password
指定冲突信息将导致错误。如果您使用
MONGODB-AWS
认证机制
连接到MongoDB Atlas集群,您可以在此字段中指定您的AWS访问密钥ID,
连接字符串
中,或者环境变量
AWS_SECRET_ACCESS_KEY
。
有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
警告
在某些系统上,直接使用
--password
选项提供的密码可能会被系统状态程序(如ps
)看到,这些程序可能被其他用户调用。考虑改为省略
--password
选项以接收交互式密码提示,或者使用
--config
选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用
MONGODB-AWS
认证机制
连接到 MongoDB Atlas 集群,并且除了您的 AWS 访问密钥 ID 和秘密访问密钥外还使用会话令牌,您可以在此字段中指定您的AWS访问密钥ID,
连接字符串的
authMechanismProperties
参数中指定您的 AWS 会话令牌,或者在环境变量
AWS_SESSION_TOKEN
中。
有关每个示例的详细信息,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
仅在使用
MONGODB-AWS
认证机制
时有效。
--authenticationDatabase=<dbname>
指定了已创建指定
--username
的认证数据库。参见 认证数据库。如果您没有指定身份验证数据库,
mongoexport
将假定用于导出的数据库包含用户的凭证。如果您使用的是 GSSAPI(Kerberos)、PLAIN(LDAP SASL)或
MONGODB-AWS
身份验证机制
,您必须将--authenticationDatabase
设置为$external
。或者,您也可以在
URI 连接字符串
中直接指定身份验证数据库。同时提供连接字符串并使用--authenticationDatabase
并指定冲突信息将导致错误。
--authenticationMechanism=<name>
默认值:SCRAM-SHA-1
指定
mongoexport
实例用于认证到mongod
或mongos
的身份验证机制。变更在版本100.1.0: 从版本
100.1.0
开始,mongoexport
在连接到 MongoDB Atlas 集群时添加了对MONGODB-AWS
身份验证机制的支持。值描述RFC 5802 使用 SHA-1 哈希函数的 Salted Challenge Response 身份验证机制。RFC 7677 标准盐值挑战响应身份验证机制,使用SHA-256散列函数。
需要将featureCompatibilityVersion设置为
4.0
。MongoDB TLS/SSL证书身份验证。MONGODB-AWS
使用AWS IAM凭证进行外部身份验证,用于连接到MongoDB Atlas集群。请参阅使用AWS IAM凭证连接到MongoDB Atlas集群。
新在版本100.1.0.
GSSAPI(Kerberos)使用Kerberos进行外部身份验证。此机制仅在MongoDB Enterprise.中可用。PLAIN(LDAP SASL)或者,您也可以直接在
URI连接字符串
中指定身份验证机制。如果同时使用--authenticationMechanism
和指定冲突信息,将会导致错误。
--gssapiServiceName=<serviceName>
使用GSSAPI/Kerberos指定服务名称。仅在服务不使用默认名称
mongodb
时需要。此选项仅在MongoDB Enterprise中可用。
--gssapiHostName=<hostname>
使用 GSSAPI/Kerberos指定服务的主机名。仅在机器的主机名与DNS解析的主机名不匹配时才需要。
此选项仅在MongoDB Enterprise中可用。
--db=<database>, -d=<database>
指定在哪个数据库上运行
mongoexport
。或者,您也可以直接在
URI连接字符串
中指定数据库。在提供连接字符串的同时使用--db
并指定冲突信息将导致错误。
--fields=<field1[,field2]>, -f=<field1[,field2]>
指定要包含在导出中的字段。使用逗号分隔的字段列表来指定多个字段。
如果您的字段名称包含空格,请使用引号将字段列表括起来。例如,如果您想导出两个字段,
phone
和user number
,则应指定--fields "phone,user number"
。对于
csv
输出格式,mongoexport
仅包含指定的字段,并且指定的字段可以是子文档中的字段。对于 JSON 输出格式,
mongoexport
仅包含指定的字段 和 `_id` 字段,并且如果指定的字段是子文档中的字段,则mongoexport
会包含包含所有字段的子文档,而不仅仅是文档中指定的字段。请参阅:[使用
--fields
选项以 CSV 格式导出数据](/docs/database-tools/mongoexport/mongoexport-examples/#std-label-mongoexport-fields-example) 以获取示例用法。
--fieldFile=<filename>
--fields
的替代方法。使用--fieldFile
选项可以在文件中指定要包含在导出中的字段,并且仅在具有值csv
的--type
选项时有效。该文件必须每行只有一个字段,并且行必须以 LF 字符(0x0A
)结束。mongoexport
仅包含指定的字段。指定的字段可以是子文档中的字段。请参阅使用文件指定CSV格式的导出字段的示例用法。
--query=<JSON>, -q=<JSON>
提供一个作为JSON文档(用引号括起来)的查询,以在导出中返回匹配的文档。
您必须用单引号(
'{ ... }'
)将查询文档括起来,以确保它不会与您的shell环境交互。查询必须以扩展JSON v2格式(宽松或规范/严格模式),包括用引号括起来的字段名和运算符
例如,给定数据库
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
小于($lt
)ISODate("2016-01-01T00:00:00Z")
的文档,其中日期使用扩展JSON v2格式(宽松模式)({ "$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
的结果进行排序。
--queryFile=<filename>
是
--query
的替代方案。使用--queryFile
选项,您可以在文件中指定查询,该文件使用扩展JSON v2格式。
--type=<string>
默认值: json
指定要导出的文件类型。指定
csv
用于CSV格式,或指定json
用于JSON格式。如果指定了
csv
,则还必须使用--fields
或--fieldFile
选项来声明要从中导出的字段。
--jsonFormat=<规范|宽松>
默认值: 宽松
修改输出以使用 MongoDB 扩展 JSON(v2)格式的规范或宽松模式。
关于规范模式和宽松模式之间的区别,请参阅 MongoDB 扩展 JSON(v2)。
--jsonArray
修改
mongoexport
的输出,将其导出的整个内容写入一个单独的 JSON 数组中。默认情况下,mongoexport
使用每个 MongoDB 文档一个 JSON 文档的方式写入数据。
--noHeaderLine
默认情况下,
mongoexport
将导出的字段名作为 CSV 输出的第一行。使用--noHeaderLine
选项,mongoexport
将导出数据而不包含字段名列表。--noHeaderLine
仅与具有值csv
的--type
选项一起使用。有关示例用法,请参阅 从 CSV 输出中排除字段名。
--readPreference=<字符串|文档>
默认值:
primary
指定
mongoexport
的 读取首选项。选项--readPreference
可以取以下值:如果只指定读取首选项模式,则为一个字符串
--readPreference=secondary 一个引用包围的文档,用于指定模式、可选的 读取首选项标记集 和可选的 maxStalenessSeconds:
--readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ], maxStalenessSeconds: 120}' 如果指定 maxStalenessSeconds,则值必须大于或等于 90。
如果读取首选项也包含在
--uri 连接字符串
中,则命令行--readPreference
会覆盖 URI 字符串中指定的读取首选项。
--limit=<number>
指定要包含在导出中的最大文档数。有关底层操作的详细信息,请参阅
limit()
。
--sort=<JSON>
指定导出结果的排序顺序。如果不存在可以支持排序操作索引,则结果必须小于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()
。