文档菜单
文档首页
/
MongoDB 数据库工具

mongoimport

本页内容

  • 概述
  • 语法
  • 选项
  • 了解更多

本文档适用于 100.10.0 版本的 mongoimport

mongoimport 从以下内容导入数据:扩展JSON、CSV或TSV导出,这些导出由mongoexport 或其他第三方导出工具创建。

请在系统命令行中运行 mongoimport,而不是在 mongo 壳中。

mongoexport 提供数据导出功能。

您可以使用MongoDB数据库工具从自托管部署迁移到 MongoDB Atlas。MongoDB Atlas 是云中MongoDB部署的完全托管服务。有关更多信息,请参阅 使用 mongorestore 种植。

有关迁移到MongoDB Atlas的所有方式,请参阅 迁移或导入数据。

提示

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

mongoimport 语法

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

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

--verbose, -v

增加在标准输出或日志文件中返回的内部报告量。通过多次包含选项(例如,-vvvvv)使用 -v 形式增加详细程度。

--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 选项指定数据库,则默认使用 mongoimporttest 数据库。如果 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 格式 文档。

注意

连接字符串中的一些组件也可以使用它们自己的显式命令行选项进行指定,例如 --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尝试连接到运行在本地主机上的MongoDB实例,端口号为27017

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

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

在指定复制集列表格式时,mongoimport始终连接到主节点。

您也可以通过指定该成员的主机和端口来连接到副本集的任何一个成员

--host=<hostname1><:port>

如果使用IPv6并且使用<address>:<port>格式,必须在地址和端口号组合的部分加上括号(例如:[<address>])。

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

--port=<port>

默认值: 27017

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

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

--ssl

启用连接到具有TLS/SSL支持的mongodmongos

或者,您还可以直接在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但没有allowConnectionsWithoutCertificatesmongodmongos时,此选项是必需的。

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

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

--sslPEMKeyPassword=<value>

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

如果PEM文件中的私钥被加密且您没有指定--sslPEMKeyPassword选项,则mongoimport将提示输入密码。请参阅TLS/SSL证书密码。

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

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

警告

在某些系统上,使用--sslPEMKeyPassword选项直接提供的密码可能会被系统状态程序(如ps)看到,这些程序可能由其他用户调用。考虑使用--config选项来指定包含密码的配置文件。

--sslCRLFile=<filename>

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

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

--sslAllowInvalidCertificates

绕过对服务器证书的验证检查,允许使用无效证书。当使用allowInvalidCertificates设置时,MongoDB会记录有关无效证书的警告。

警告

尽管可用,但如果可能,请避免使用--sslAllowInvalidCertificates选项。如果必须使用--sslAllowInvalidCertificates,则仅在入侵不可能的系统上使用此选项。

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

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

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

--sslAllowInvalidHostnames

禁用TLS/SSL证书中的主机名验证。允许mongoimport连接到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 IAM凭据连接到MongoDB Atlas集群

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

指定用于身份验证MongoDB数据库的密码。与--username--authenticationDatabase选项一起使用。

要提示用户输入密码,请在没有--password或指定空字符串作为--password值的情况下传递--username选项,例如--password ""

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

如果使用MONGODB-AWS 身份验证机制连接到MongoDB Atlas集群,您可以在以下位置指定您的AWS密钥访问密钥:

有关每个示例,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

警告

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

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

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

--awsSessionToken=<AWS 会话令牌>

如果使用 MongoDB Atlas 集群,并通过 MONGODB-AWS 认证机制 连接,并且除了 AWS 访问密钥 ID 和密钥之外还使用会话令牌,可以在

有关每个示例,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群

仅在使用 MONGODB-AWS 认证机制 时有效。

--authenticationDatabase=<dbname>

指定已创建指定 --username 的认证数据库。参见 认证数据库。

如果使用 GSSAPI (Kerberos),PLAIN (LDAP SASL) 或 MONGODB-AWS 认证机制,您必须将 --authenticationDatabase 设置为 $external

另外,您也可以直接在URI 连接字符串中指定认证数据库。当同时使用--authenticationDatabase并指定冲突信息时,将导致错误。

--authenticationMechanism=<name>

默认: SCRAM-SHA-1

指定 mongoimport 实例用于认证到 mongodmongos 的认证机制。

变更于版本100.1.0: 从版本 100.1.0 开始,mongoimport 在连接到 MongoDB Atlas 集群时,增加了对 MONGODB-AWS 认证机制的支持。

描述

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)
使用LDAP进行外部认证。您还可以使用PLAIN对数据库内的用户进行认证。PLAIN以明文形式传输密码。此机制仅适用于MongoDB Enterprise。

或者,您也可以直接在URI连接字符串中指定认证机制。在同时使用--authenticationMechanism并指定冲突信息时,将导致错误。

--gssapiServiceName=<serviceName>

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

此选项仅适用于MongoDB企业版。

--gssapiHostName=<hostname>

使用GSSAPI/Kerberos指定服务的hostname。只有在机器的hostname与DNS解析的hostname不匹配时才需要。

此选项仅适用于MongoDB企业版。

--db=<database>, -d=<database>

指定在哪个数据库上运行mongoimport

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

注意

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

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

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

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

在导入没有在第一行(即标题行)包含字段名称的 CSVTSV 文件时,指定以逗号分隔的字段名称列表。

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

如果您在导入 JSON 数据时尝试包含 --fields,则 mongoimport 返回错误。 --fields 只适用于 CSVTSV 导入。

--fieldFile=<filename>

作为 --fields 的替代方案,--fieldFile 选项允许您指定一个文件,其中包含字段名称列表(如果您的 CSVTSV 文件的第一行不包含字段名称)。每行放置一个字段。

要同时指定字段类型和字段名,请使用 --fieldFile 选项,并带上 --columnsHaveTypes

如果您尝试在导入 JSON 数据时包含 --fieldFile 选项,mongoimport 将返回错误。 --fieldFile 仅适用于 CSVTSV 导入。

--ignoreBlanks

忽略 CSV 和 TSV 导出中的空字段。如果不指定,mongoimport 将在导入的文档中创建没有值的字段。

如果您尝试在导入 JSON 数据时包含 --ignoreBlanks 选项,mongoimport 将返回错误。 --ignoreBlanks 仅适用于 CSV 或 TSV 导入。

--type=<json|csv|tsv>

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

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

--file=<filename>

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

--drop

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

--headerline

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

如果尝试在导入JSON数据时包含--headerline,则mongoimport会返回错误。--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 选项与 --useArrayIndexFields 一起,当尝试导入包含空白值(例如 "")的文档时,mongoimport 将返回错误。

在导入 JSON 数据时,--useArrayIndexFields 选项没有任何效果,因为数组已经编码在 JSON 格式中。

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

默认值: insert

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

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

描述
insert
将导入文件中的文档插入。如果您尝试导入包含具有 唯一索引(如 _id)的字段重复值的文档,mongoimport 将返回错误。
upsert
用导入文件中匹配的文档替换数据库中现有的文档。mongoimport 插入其他所有文档。《在导入过程中替换匹配的文档》描述了如何使用 --mode upsert
合并
将匹配导入文件中文档的新文档与现有文档合并。mongoimport 插入其他所有文档。《在导入过程中合并匹配的文档》描述了如何使用 --mode merge
删除

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

新增于版本100.0.0.

--upsertFields=<field1[,field2]>

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

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

如果不指定字段,则 --upsertFields 将基于 _id 字段执行 upsert。

为确保足够的性能,您应该为使用 --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>

默认值: majority

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

指定写关注为一个包含 w 选项 的文档:

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

如果写关注也包含在 --uri 连接字符串 中,则命令行 --writeConcern 会覆盖 URI 字符串中指定的写关注。

--bypassDocumentValidation

启用 mongoimport 在操作期间跳过 文档验证。这允许您插入不满足验证要求的文档。

--columnsHaveTypes

指示 mongoimport 指定的字段列表(在 --fields--fieldFile--headerline 中)指定了每个字段的类型。

字段名称必须采用以下形式 <colName>.<type>(<arg>)。如果您想在参数中包含以下字符,则必须使用反斜杠转义:()\

类型
支持参数
示例标题字段
auto()
无。
misc.auto()
binary(<arg>)
  • base32 (RFC4648 编码方案)

  • base64 (RFC4648 编码方案)

  • 十六进制

用户缩略图.binary(base64)
布尔值()
无。
已验证布尔值()
日期(<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)
十进制()
None
价格十进制()
双精度浮点数()
无。
收入双精度浮点数()
32位整数()
无。
关注者数量.32位整数()
64位整数()
无。
大数.64位整数()
字符串()
无。
邮编.字符串()

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

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

--parseGrace=<grace>

默认值: 停止

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

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

描述
自动转换
根据字段的值分配类型。例如,如果一个字段定义为 double,并且该字段的值为 "foo",则 mongoimport 将该字段值转换为字符串类型。
跳过字段
对于正在导入的行,mongoimport 不包括类型与预期类型不匹配的字段。
跳过行
mongoimport 不导入包含类型与预期类型不匹配的值的行。
停止
mongoimport 返回错误并结束导入。

返回

示例