Docs 菜单
Docs 主页
/
MongoDB 数据库工具

mongoimport

在此页面上

  • Synopsis
  • 语法
  • 选项
  • 了解详情

本文档适用于 mongoimport100.10.0 版本。

mongoimport 从由 mongoexport 创建的 扩展 JSON、CSV 或 TSV 导出格式(或可能是其他第三方导出工具)导入内容。

从系统命令行运行 mongoimport,而非 mongo shell。

mongoexport 提供数据导出功能。

您可以使用 Database Tools 从自托管部署迁移到 MongoDB Atlas。MongoDB Atlas 是用于云中 MongoDB 部署的完全托管服务。要了解详情,请参阅使用 mongorestore 播种。

要了解迁移到 MongoDB Atlas 的所有方法,请参阅迁移或导入数据。

提示

您还可以使用图形用户界面工具 MongoDB Compass 导入和导出数据。有关详情,请参阅 MongoDB Compass 导入和导出。

mongoimport 事务语法:

mongoimport <options> <connection-string> <file>
--help

返回有关 mongoimport 的选项和使用的信息。

--verbose, -v

增加标准输出或日志文件中返回的内部报告数量。通过包括多个 -v 选项来提高详细程度,(例如 -vvvvv。)

--quiet

在尝试限制输出量的安静模式下运行 mongoimport

该选项会抑制:

  • 数据库命令输出

  • 复制活动

  • 连接接受事件

  • 连接关闭事件

--version

返回 mongoimport 版本号。

--config=<filename>

版本 100.3.0 中的新增内容

指定包含以下 mongoimport 选项的敏感值的 YAML 配置文件的完整路径:

除通过密码提示来指定密码之外,这是为 mongoimport 指定密码的另一推荐方法。

配置文件采用以下形式:

password: <password>
uri: mongodb://mongodb0.example.com:27017
sslPEMKeyPassword: <password>

password: 字段指定密码并在 uri: 字段中提供包含冲突密码的连接字符串将导致错误。

请务必使用相应的文件系统权限保护此文件。

注意

如果使用 --config 来指定配置文件,并使用 --password--uri--sslPEMKeyPassword 选项来 mongoimport,那么每个命令行选项均会覆盖其在配置文件中的相应选项。

--uri=<connectionString>

指定 MongoDB 部署的可解析 URI 连接字符串(用引号括起):

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

注意

如果未使用--db--uri选项指定数据库,则mongoimport默认使用test数据库。 如果test数据库不存在, mongoimport将创建该数据库。

mongoimport100.0 版本开始,也可以将连接字符串作为位置参数提供,而无需使用 --uri 选项:

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

作为位置参数,可以在命令行上的任何位置指定连接字符串,前提是它以 mongodb://mongodb+srv:// 开头。例如:

mongoimport --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl

只能提供一个连接字符串。无论是使用 --uri 选项还是作为位置参数,尝试纳入多个连接字符串都会导致错误。

有关连接字符串的组件信息,请参阅连接字符串 URI 格式文档。

注意

connection string 中的某些组件也可以使用各自的显式命令行选项来指定,例如 --username--password。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。

注意

如果是在 Ubuntu 18.04 上使用 mongoimport,则在使用带 --uri 选项的 SRV 连接字符串(采用 mongodb+srv:// 格式)时,可能会出现“cannot unmarshal DNS”错误消息。如果是这样,请改用以下选项之一:

警告

在某些系统上,使用 --uri 选项在连接字符串中提供的密码,可能会被其他用户调用的系统状态程序(如 ps )探测到。请考虑:

  • 在连接字符串中省略密码,接收交互式密码提示,或者

  • 使用 --config 选项指定包含密码的配置文件。

--host=<hostname><:port>, -h=<hostname><:port>

默认:localhost:27017

指定 MongoDB 部署的可解析主机名。默认情况下,mongoimport 尝试连接到在本地主机端口号 27017 上运行的 MongoDB 实例。

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

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

指定副本集列表格式时,mongoimport 始终连接到主节点

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

--host=<hostname1><:port>

如果您使用 IPv6 并采用 <address>:<port> 格式,则须将地址与端口的组合部分用方括号括起(即 [<address>])。

或者,您也可直接在 URI connection string 中指定主机名。在提供连接字符串的同时使用 --host 并指定冲突信息将导致错误。

--port=<port>

默认值:27017

指定 MongoDB 实例侦听客户端连接的 TCP 端口。

或者,也可以直接在 URI connection string 中指定端口。在提供连接字符串的同时使用 --port 并指定冲突信息将导致错误。

--ssl

支持链接到启用 TLS/SSL 支持的 mongodmongos

或者,也可以直接在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且未启用allowConnectionsWithoutCertificatesmongodmongos时,需要使用此选项。

或者,也可以直接在 URI connection string 中指定 .pem 文件。在提供连接字符串的同时使用 --sslPEMKeyFile 并指定冲突信息将导致错误。

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

--sslPEMKeyPassword=<value>

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

如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword选项,则mongoimport会提示输入密码。 请参阅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 会记录无效证书的警告。

警告

尽管可用,但请尽可能避免使用 --sslAllowInvalidCertificates 选项。如果需要使用 --sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。

在未验证服务器证书的情况下,连接到 mongodmongos 实例存在潜在的安全风险。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅 --sslAllowInvalidHostnames

或者,也可以直接在 URI connection string 中禁用证书验证。在提供连接字符串的同时使用 --sslAllowInvalidCertificates 并指定冲突信息将导致错误。

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

--sslAllowInvalidHostnames

禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持 mongoimport 连接到 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-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 访问密钥 ID:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

--password=<password>, -p=<password>

指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --username--authenticationDatabase 选项结合使用。

如要提示用户输入密码,可使用不带 --password--username 选项,或指定空字符串作为 --password 值,如 --password ""

或者,您也可以直接在 URI connection string 中指定密码。在提供连接字符串的同时使用 --password 并指定冲突信息将导致错误。

如果使用 MONGODB-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

警告

在某些系统上,直接使用 --password 选项提供的密码,可能会被其他用户调用的系统状态程序(如 ps)探测到。请考虑:

  • 省略 --password 选项,从而接收交互式密码提示,或

  • 使用 --config 选项指定包含密码的配置文件。

--awsSessionToken=<AWS Session Token>

如果使用 MONGODB-AWSauthentication mechanism 连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

仅在使用 MONGODB-AWS authentication mechanism 时有效。

--authenticationDatabase=<dbname>

指定已创建指定 --username 的身份验证数据库。请参阅身份验证数据库

如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或 MONGODB-AWS authentication mechanisms,则须将 --authenticationDatabase 设为 $external

或者,也可以直接在 URI connection string 中指定身份验证数据库。在提供连接字符串的同时使用 --authenticationDatabase 并指定冲突信息将导致错误。

--authenticationMechanism=<name>

默认值:SCRAM-SHA-1

指定 mongoimport 实例用来向 mongodmongos 进行身份验证的机制。

在版本 100.1.0 中进行了更改:从版本 100.1.0 开始,mongoimport 在连接到 MongoDB Atlas 集群时增加了对 MONGODB-AWS 身份验证机制的支持。

说明

RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism

需将 featureCompatibilityVersion 设为 4.0

MongoDB TLS/SSL 证书身份验证。
MONGODB-AWS

使用 AWS IAM 凭据进行外部身份验证,用于连接到 MongoDB Atlas 集群。请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群

100.1.0 版本新增

GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。
普通版 (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>

指定要在其上运行mongoimport的数据库的名称。

或者也可以直接在 URI connection string 中指定数据库。在提供连接字符串的同时使用 --db 并指定冲突信息将导致错误。

注意

如果未使用--db--uri选项指定数据库,则mongoimport默认使用test数据库。 如果test数据库不存在, mongoimport将创建该数据库。

--collection=<collection>, -c=<collection>

指定要导入的集合。 如果未指定--collectionmongoimport将从输入文件名中读取集合名称,如果有扩展名,则省略文件的扩展名。

--fields=<field1[,field2]>, -f=<field1[,field2]>

导入 CSVTSV 文件时,如果文件第一行(即页眉)中没有字段名称,请指定一个以逗号分隔的字段名称列表。

要同时指定字段类型和字段名称,请将--fields--columnsHaveTypes一起使用。

如果您在导入 JSON 数据时尝试包含--fieldsmongoimport会返回错误。 --fields仅适用于CSVTSV导入。

--fieldFile=<filename>

作为--fields 的替代方案,如果--fieldFile CSV TSV 文件的第一行不包含字段名称(即标题)。 每行放置一个字段。

要同时指定字段类型和字段名称,请将--fieldFile--columnsHaveTypes一起使用。

如果您在导入 JSON 数据时尝试包含--fieldFilemongoimport会返回错误。 --fieldFile仅适用于CSVTSV导入。

--ignoreBlanks

忽略CSVTSV导出中的空字段。 如果未指定, mongoimport将在导入的文档中创建无值字段。

如果您在导入 JSON 数据时尝试包含--ignoreBlanksmongoimport会返回错误。 --ignoreBlanks仅适用于CSVTSV导入。

--type=<json|csv|tsv>

指定要导入的文件类型。默认格式为 JSON,但可以导入 CSVTSV 文件。

csv 解析器接受符合 RFC-4180 的数据。因此,反斜杠不是有效的转义字符。如果你使用双引号将 CSV 数据中的字段括起来,则必须通过在前面添加另一个双引号来转义内部双引号。

--file=<filename>

指定包含要导入数据的文件的位置和名称。 如果未指定文件, mongoimport则会从标准输入读取数据(例如 “stdin”)。

--drop

修改导入过程,以便目标实例在从输入导入数据之前删除集合和任何关联的索引

--headerline

如果使用--type csv--type tsv ,则使用第一行作为字段名称。 否则, mongoimport会将第一行导入为独立的文档。

如果您在导入 JSON 数据时尝试包含--headerlinemongoimport会返回错误。 --headerline仅适用于CSVTSV导入。

--useArrayIndexFields

100.0.0 版本新增

导入 CSVTSV 文件时,将字段中的自然数解释为数组索引。

字段名称必须采用 <colName>.<arrayIndex> 形式,其中 arrayIndex 是一个自然数,从 0 开始,依次递增 1,数组中的每个成员都是如此。

例如,使用以下 CSV 文件:

a.0,a.1,a.2,a.3
red,yellow,green,blue

使用--useArrayIndexFields选项导入将生成以下文档:

"a" : [ "red", "yellow", "green", "blue" ]

如果也使用--columnsHaveTypes选项,请使用<colName>.<arrayIndex>.<type>(<arg>)形式指定每个字段的数组索引和类型。 有关更多信息,请参阅--columnsHaveTypes

带有前导零的数字键(例如a.000,a.001 ) 不会被解释为数组索引。

如果键的第一部分是自然数(例如0.a,1.a),会被解释为文档键,而不是数组索引。

如果将--ignoreBlanks选项与mongoimport --useArrayIndexFields一起使用,则当您尝试导入包含空值(例如 "" )。

--useArrayIndexFields导入 JSON 数据时, 选项无效,因为数组已采用 JSON 格式编码。

--mode=<insert|upsert|merge|delete>

Default: insert

指定导入进程应如何处理数据库中与导入文件中的文档相匹配的现有文档。

默认情况下, mongoimport使用_id字段将集合中的文档与导入文件中的文档进行匹配。 要为upsertmergedelete模式指定与现有文档匹配的字段,请使用--upsertFields

说明
insert
在导入文件中插入文档。 如果尝试导入的文档包含具有唯一索引的字段的重复值(例如_idmongoimport会返回错误。
upsert
用导入文件中的匹配文档替换数据库中的现有文档。 mongoimport插入所有其他文档。 在导入期间替换匹配文档描述了如何使用--mode upsert
merge
将导入文件中与文档匹配的现有文档与新文档合并。 mongoimport插入所有其他文档。 在导入期间合并匹配文档描述了如何使用--mode merge
delete

删除数据库中与导入文件中的文档匹配的现有文档。 mongoimport不会对不匹配的文档采取任何操作删除匹配文档描述了如何使用--mode delete

100.0.0 版本新增

--upsertFields=<field1[,field2]>

为导入过程的查询部分指定字段列表。 --upsertFields可与--mode upsertmergedelete一起使用。

如果现有文档中的 _id 字段与文档中的字段不匹配,但其他字段或字段组合可以唯一地标识文档,作为执行更新或插入操作的基础,则使用此选项。

如果未指定字段, --upsertFields将根据_id字段进行更新或插入。

为了确保足够的性能,您使用--upsertFields指定的一个或多个字段应该存在索引。

--stopOnError

强制mongoimport在出现第一个错误时停止插入操作,而不是出错时继续执行此操作。

默认情况下, mongoimport会在遇到重复键和文档验证错误时继续执行操作。 为确保程序在出现这些错误时停止运行,请指定--stopOnError

--jsonArray

接受在单个JSON数组中导入用多个 MongoDB 文档表示的数据。 仅限于16 MB 或更小的导入。

--jsonArraymongoexport --jsonArray结合使用。

--legacy

表示导入数据为扩展 JSON v1 格式,而非默认的扩展 JSON v2 格式。

提示

一般来说, mongoexportmongoimport的版本应该匹配。 也就是说,要导入从mongoexport创建的数据,应使用相应版本的mongoimport

例如,如果导入数据是 v1 格式:

{"_id":1.0,"myregfield":{"$regex":"foo","$options":"i"}}

导入时不使用--legacy选项会导致集合中出现以下文档:

{ "_id" : 1, "myregfield" : { "$regex" : "foo", "$options" : "i" } }

使用--legacy导入会在集合中生成以下文档:

{ "_id" : 1, "myregfield" : { "$regularExpression" : { "pattern" : "foo", "options" : "i" } } }
--maintainInsertionOrder

默认:false

如果已指定,mongoimport 则会按照这些文档在输入源中出现的顺序将其插入。也就是说,批量写入批处理顺序和批处理中的文档顺序都将保持不变。

指定 --maintainInsertionOrder 还会启用 --stopOnError 并将 numInsertionWorkers 设置为 1。

如果未指定,mongoimport 则可能会按任意顺序执行插入。

--numInsertionWorkers=<int>

默认值:1

指定要同时运行的插入工作线程的数量。

对于大型导入,增加插入工作线程的数量可以提高导入的速度。

--writeConcern=<document>

默认:多数

mongoimport执行的每个写入操作指定写关注

使用w 选项将写关注指定为文档:

--writeConcern "{w:'majority'}"

如果写关注也包含在--uri connection string中,则命令行--writeConcern将覆盖 URI string中指定的写关注。

--bypassDocumentValidation

启用 mongoimport 以便在操作过程中绕过文档验证。这样就可以插入不符合验证要求的文档。

--columnsHaveTypes

指示mongoimport ,由--fields--fieldFile--headerline中指定的字段列表指定每个字段的类型。

字段名称必须采用 <colName>.<type>(<arg>) 的格式。如果要将以下字符包含在参数中,则必须进行反斜杠转义:()\

type
支持的参数
示例头字段
auto()
无。
misc.auto()
binary(<arg>)
user thumbnail.binary(base64)
boolean()
无。
verified.boolean()
date(<arg>)
date_go(<arg>) 的别名。Go 语言 time.Parse 格式。
created.date(2006-01-02 15:04:05)
date_go(<arg>)
created.date_go(2006-01-02T15:04:05Z)
date_ms(<arg>)
created.date_ms(yyyy-MM-dd H:mm:ss)
date_oracle(<arg>)
created.date_oracle(YYYY-MM-DD HH24:MI:SS)
decimal()
price.decimal()
double()
无。
revenue.double()
int32()
无。
followerCount.int32()
int64()
无。
bigNumber.int64()
string()
无。
zipcode.string()

有关示例用法,请参阅导入具有指定字段类型的 CSV

如果您在导入 JSON 数据时尝试包含--columnsHaveTypesmongoimport会返回错误。 --columnsHaveTypes仅适用于CSVTSV导入。

--parseGrace=<grace>

默认值:stop(停止)

指定在使用--columnsHaveTypes导入 CSV 或 TSV 文件时, mongoimport如何处理类型强制失败。

--parseGrace 导入 JSON 文档时无效。

说明
autoCast
根据字段值指定类型。 例如,如果一个字段定义为 double,而该字段的值为 "foo",则 mongoimport 将使该字段值成为string类型。
skipField
对于正在导入的行, mongoimport不包括类型与预期类型不匹配的字段。
skipRow
mongoimport 不会导入包含其类型与所需类型 不匹配的值的对应行。
stop
mongoimport 返回一个错误,将会结束导入。

后退

示例