Docs 主页 → 启动和管理 MongoDB → MongoDB 数据库工具
mongoexport
本文档适用于 mongoexport
的 100.9.0
版本。
概要
mongoexport
是一种数据库工具,可将存储在 MongoDB 实例中的数据导出为 JSON 或 CSV 文件。
从系统命令行运行mongoexport
,而不是 mongo
Shell。
提示
另请参阅:
mongoimport
而它提供了相应的结构化数据
导入功能。
注意
如果要存档过时数据以节省存储成本,请考虑 MongoDB Atlas 中的 Online Archive 。 Online Archive 会自动将不常访问的数据存档到完全托管的 S3 存储桶,以实现经济高效的数据分层。
您可以使用 MongoDB 数据库工具从自托管部署迁移到MongoDB Atlas 。 MongoDB Atlas 是针对云中 MongoDB 部署的完全托管服务。要了解更多信息,请参阅使用 mongorestore 播种。
要了解迁移到 MongoDB Atlas 的所有方法,请参阅迁移或导入数据。
语法
mongoexport
事务语法:
mongoexport --collection=<coll> <options> <connection-string>
您必须指定要导出的collection
。如果未指定output file
, mongoexport
将写入标准输出(例如 stdout)。
连接到 MongoDB 实例
要连接到端口 27017 上所运行的本地 MongoDB 实例,您不必指定主机或端口。
例如,要将指定的collection
从在端口27017上运行的本地 MongoDB 实例导出到指定的output file
}:
mongoexport --collection=events --db=reporting --out=events.json
要指定 MongoDB 实例的主机和/或端口,可以执行以下任一操作:
在
--uri connection string
中指定主机名和端口:mongoexport --uri="mongodb://mongodb0.example.com:27017/reporting" --collection=events --out=events.json [additional options] 使用
--uri connection string
时,可以将数据库指定为字符串的一部分。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]
有关可用选项的更多信息,请参阅选项。
连接到副本集
要连接到副本集以导出其数据,可以执行以下任一操作:
在
--uri connection string
中指定副本集名称和节点: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 connection string
时,可以将数据库指定为字符串的一部分。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 connection string
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 connection string
时,可以将数据库指定为字符串的一部分。您可以使用
--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]
有关可用选项的更多信息,请参阅选项。
连接到分片集群
要连接到分片集群以导出其数据,可以执行以下任一操作:
在 中指定
mongos
--uri connection string
实例的主机名mongoexport --uri="mongodb://mongos0.example.com:27017/reporting" --collection=events --out=events.json [additional options] 使用
--uri connection string
时,可以将数据库指定为字符串的一部分。mongoexport --host="mongos0.example.com:27017" --collection=events --db=reporting --out=events.json[additional options]
默认情况下, mongoexport
从分片副本集的主节点读取。要覆盖默认值,可以指定读取偏好:
可以在以下语句中指定读取偏好:
--uri connection string
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 connection string
时,可以将数据库指定为字符串的一部分。您可以使用
--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 格式文档。
注意
connection string
中的某些组件也可以使用自己的显式命令行选项来指定,例如--username
和--password
。在提供连接字符串的同时,使用显式选项并指定冲突信息将导致错误。注意
如果在 Ubuntu 上使用
mongoexport
18 。04cannot unmarshal DNS
,在使用带有 选项的 SRV 连接字符串 (采用mongodb+srv://
形式)时,您可能会遇到--uri
错误消息。如果是这样,请改用以下选项之一:--uri
带有 非 SRV 连接字符串 的 选项(采用mongodb://
形式)--host
选项,用于指定要直接连接的主机
--host=<hostname><:port>, -h=<hostname><:port>
默认:localhost:27017
指定 MongoDB 部署的可解析主机名。默认情况下,
mongoexport
尝试连接到在本地主机端口号27017
上运行的 MongoDB 实例。要连接到副本集,请指定
replSetName
和副本集成员的种子列表,如下所示:--host=<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> 指定副本集列表格式时,
mongoexport
始终连接到主节点。还可以通过仅指定该成员的主机和端口来连接至副本集的任何单个成员:
--host=<hostname1><:port> 如果您使用 IPv6 并采用
<address>:<port>
格式,则须将地址与端口的组合部分用方括号括起(即[<address>]
)。或者,也可以直接在
URI connection string
中指定主机名。在提供连接字符串的同时使用--host
并指定冲突信息将导致错误。
--port=<port>
默认值:27017
指定 MongoDB 实例侦听客户端连接的 TCP 端口。
或者,也可以直接在
URI connection string
中指定端口。在提供连接字符串的同时使用--port
并指定冲突信息将导致错误。
--ssl
允许连接到已启用 TLS/SSL 支持的
mongod
或mongos
。或者,您也可以直接在
URI connection string
中配置 TLS/SSL 支持。在提供连接字符串的同时使用--ssl
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--sslCAFile=<filename>
指定包含来自证书颁发机构的根证书链的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。或者,也可以直接在
URI connection string
中指定.pem
文件。在提供连接字符串的同时使用--sslCAFile
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--sslPEMKeyFile=<filename>
指定同时包含 TLS/SSL 证书和密钥的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。使用
--ssl
选项连接到已启用CAFile
且未启用allowConnectionsWithoutCertificates
的mongod
或mongos
时,需要使用此选项。或者,也可以直接在
URI connection string
中指定.pem
文件。在提供连接字符串的同时使用--sslPEMKeyFile
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--sslPEMKeyPassword=<value>
指定用于解密证书密钥文件的密码(即
--sslPEMKeyFile
)。仅当证书密钥文件已加密时才使用--sslPEMKeyPassword
选项。在所有情况下,mongoexport
都会从所有日志记录和报告输出中编辑密码。如果 PEM 文件中的私钥已加密并且您未指定
--sslPEMKeyPassword
选项,则mongoexport
将提示输入密码。请参阅TLS/SSL 证书密码。或者,也可以直接在
URI connection string
中指定密码。在提供连接字符串的同时使用--sslPEMKeyPassword
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
警告
在某些系统上,使用
--sslPEMKeyPassword
选项直接提供的密码可能会对其他用户调用的系统状态程序(例如ps
可见。请考虑改用--config
选项来指定包含密码的配置文件。
--sslCRLFile=<filename>
指定包含证书吊销列表的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--sslAllowInvalidCertificates
绕过对服务器证书的验证检查并允许使用无效证书。使用
allowInvalidCertificates
设置时,MongoDB 将使用无效证书记录为警告。警告
或者,也可以直接在
URI connection string
中禁用证书验证。在提供连接字符串的同时使用--sslAllowInvalidCertificates
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--sslAllowInvalidHostnames
禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持
mongoexport
连接到 MongoDB 实例。或者,也可以直接在
URI connection string
中禁用主机名验证。在提供连接字符串的同时使用--sslAllowInvalidHostnames
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。
--username=<username>, -u=<username>
指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--password
和--authenticationDatabase
选项结合使用。或者,也可以直接在
URI connection string
中指定用户名。在提供连接字符串的同时使用--username
并指定冲突信息将导致错误。如果使用 连接到 MongoDB Atlas
MONGODB-AWS
authentication mechanism
集群,您可以在以下位置指定您的 AWS 访问密钥 ID:这个字段,
AWS_ACCESS_KEY_ID
环境变量。
有关每个凭证的示例,请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群。
--password=<password>, -p=<password>
指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--username
和--authenticationDatabase
选项结合使用。要提示用户输入密码,请传递不带 的 选项,或指定空字符串作为
--username
--password
--password
值,如--password ""
中。或者,也可以直接在
URI connection string
中指定密码。在提供连接字符串的同时使用--password
并指定冲突信息将导致错误。如果使用 连接到 MongoDB Atlas
MONGODB-AWS
authentication mechanism
集群,您可以在以下位置指定 AWS 秘密访问密钥:这个字段,
AWS_SECRET_ACCESS_KEY
环境变量。
有关每个凭证的示例,请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群。
警告
在某些系统上,使用
--password
选项直接提供的密码可能会对其他用户调用的系统状态程序(例如ps
可见。请考虑:省略
--password
选项以接收交互式密码提示,或使用
--config
选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用 连接到 MongoDB Atlas 集群,并且除了
MONGODB-AWS
authentication mechanism
AWS 访问密钥 ID 和秘密访问密钥之外还使用会话令牌,则可以在以下位置指定 AWS 会话令牌:这个字段,
将
AWS_SESSION_TOKEN
authMechanismProperties
参数传递给connection string
,或者AWS_SESSION_TOKEN
环境变量。
有关每个凭证的示例,请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群。
仅在使用
MONGODB-AWS
authentication mechanism
时有效。
--authenticationDatabase=<dbname>
指定已在其中创建指定
--username
的身份验证数据库。请参阅身份验证数据库。如果未指定身份验证数据库,则
mongoexport
假定指定要导出的数据库保存用户的档案。如果使用GSSAPI (Kerberos)、 PLAIN (LDAP SASL) 或
MONGODB-AWS
authentication mechanisms
,则必须将--authenticationDatabase
设置为$external
。或者,也可以直接在
URI connection string
中指定身份验证数据库。在提供连接字符串的同时使用--authenticationDatabase
并指定冲突信息将导致错误。
--authenticationMechanism=<name>
默认值:SCRAM-SHA-1
指定
mongoexport
实例用于向mongod
或mongos
进行身份验证的身份验证机制。在版本100中进行了更改。 1 。 0 :从版本
100.1.0
开始,mongoexport
在连接到MongoDB Atlas集群时增加了对MONGODB-AWS
身份验证机制的支持。值说明RFC5802 使用 SHA-1 哈希函数的标准 Salted 挑战响应身份验证机制。RFC7677 使用 SHA-256 哈希函数的标准 Salted 挑战响应身份验证机制。
需将 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)使用 LDAP 进行外部身份验证。您还可以使用PLAIN
对数据库内用户进行身份验证。PLAIN
以纯文本形式传输密码。此机制仅在MongoDB Enterprise 中可用。或者,也可以直接在
URI connection string
中指定身份验证机制。在提供连接字符串的同时使用--authenticationMechanism
并指定冲突信息将导致错误。
--gssapiServiceName=<serviceName>
使用GSSAPI/Kerberos指定服务名称。仅当服务不使用默认名称
mongodb
时才需要。此选项仅在 MongoDB Enterprise 中可用。
--gssapiHostName=<hostname>
使用GSSAPI/Kerberos指定服务的主机名。仅当计算机的主机名与 DNS 解析的主机名不匹配时才需要。
此选项仅在 MongoDB Enterprise 中可用。
--db=<database>, -d=<database>
指定要在其上运行
mongoexport
的数据库的名称。或者,也可以直接在
URI connection string
中指定数据库。在提供连接字符串的同时使用--db
并指定冲突信息将导致错误。
--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
选项允许您在文件中指定要包含在导出中的一个或多个字段,并且仅在与值为csv
的--type
选项一起使用时有效。此文件每行只能有一个字段,且各行必须以 LF 字符 (0x0A
) 结尾。mongoexport
仅包括指定的字段。 指定的字段可以是子文档中的字段。有关示例用法,请参阅使用文件指定要以 CSV 格式导出的字段。
--query=<JSON>, -q=<JSON>
以JSON 文档形式提供查询(用引号括起来),以在导出时返回匹配的文档。
必须用单引号 (
'{ ... }'
) 括起查询文档,确保它不会与 shell 环境交互。查询必须采用扩展 JSON v 2格式(宽松模式或规范/严格模式) ,包括用引号将字段名称和操作符括起来:
例如,数据库
records
中名为test
的集合包含以下文档:{ "_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")
,它使用2 ({ "$date": "YYYY-MM-DDTHH:mm:ss.mmm\<offset\>"}
的扩展 JSON v 格式(宽松模式)指定: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"}} 您可以使用
mongoexport
的--sort
选项对结果进行排序。
--queryFile=<filename>
--query
的替代方案。--queryFile
选项允许您在文件中指定扩展 JSON v 2格式的查询。
--type=<string>
默认值:json
指定要导出的文件类型。为CSV格式指定
csv
,或为JSON格式指定json
。如果指定
csv
,则还必须使用--fields
或--fieldFile
选项来声明要从集合中导出的字段。
--jsonFormat=<canonical|relaxed>
默认:宽松
修改输出以使用MongoDB 扩展 JSON (v 2 )格式的规范或宽松模式。
有关规范模式和宽松模式之间的区别,请参阅MongoDB 扩展 JSON (v 2 )。
--jsonArray
修改
mongoexport
的输出,将导出的全部内容写入单个JSON数组。默认情况下,mongoexport
为每个 MongoDB 文档使用一个 JSON 文档写入数据。
--noHeaderLine
默认情况下,
mongoexport
将导出的字段名称作为 CSV 输出的第一行。--noHeaderLine
指示mongoexport
导出数据,但不包含字段名称列表。--noHeaderLine
仅在与值为csv
的--type
选项一起使用时有效。有关示例用法,请参阅从 CSV 输出中排除字段名称。
--readPreference=<string|document>
默认值:
primary
指定
mongoexport
的读取偏好。--readPreference
选项可以使用:如果仅指定读取偏好模式,则为一个字符串:
--readPreference=secondary 带引号的文档,用于指定模式、可选的读取偏好标签集和可选的maxStalenessSeconds:
--readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ], maxStalenessSeconds: 120}' 如果指定maxStalenessSeconds ,则该值必须大于或等于90 。
如果读取偏好也包含在
--uri connection string
中,则命令行--readPreference
将覆盖 URI 字符串中指定的读取偏好。
--limit=<number>
指定要包含在导出中的最大文档数。有关底层操作的信息,请参阅
limit()
。
--sort=<JSON>
指定导出结果的顺序。如果不存在可以支持排序操作的索引,则结果必须小于 32 MB。
将
--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()
。