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>
选项
--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]]" 从
mongoimport
的100.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
。在提供连接字符串的同时使用显式选项并指定冲突信息将导致错误。注意
--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支持的
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
选项。在任何情况下,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会记录有关无效证书的警告。警告
或者,您也可以直接在
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_ACCESS_KEY_ID
环境变量。
有关每个示例,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
--password=<password>, -p=<password>
指定用于身份验证MongoDB数据库的密码。与
--username
和--authenticationDatabase
选项一起使用。要提示用户输入密码,请在没有
--password
或指定空字符串作为--password
值的情况下传递--username
选项,例如--password ""
。或者,您也可以直接在
URI连接字符串
中指定密码。同时使用--password
并指定冲突信息会导致错误。如果使用MONGODB-AWS 身份验证机制连接到MongoDB Atlas集群,您可以在以下位置指定您的AWS密钥访问密钥:
此字段
的
连接字符串
,或AWS_SECRET_ACCESS_KEY
环境变量。
有关每个示例,请参阅使用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
实例用于认证到mongod
或mongos
的认证机制。变更于版本100.1.0: 从版本
100.1.0
开始,mongoimport
在连接到 MongoDB Atlas 集群时,增加了对MONGODB-AWS
认证机制的支持。值描述RFC 5802 使用 SHA-1 哈希函数的 Salted Challenge Response Authentication Mechanism 标准。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企业版。
--gssapiHostName=<hostname>
使用GSSAPI/Kerberos指定服务的hostname。只有在机器的hostname与DNS解析的hostname不匹配时才需要。
此选项仅适用于MongoDB企业版。
--db=<database>, -d=<database>
指定在哪个数据库上运行
mongoimport
。或者,您也可以直接在
URI连接字符串
中指定数据库。在同时使用--db
并指定冲突信息时,将导致错误。
--collection=<collection>, -c=<collection>
指定要导入的集合。如果您不指定
--collection
,mongoimport
将从输入文件名中读取集合名称,如果文件有扩展名,则忽略。
--fields=<field1[,field2]>, -f=<field1[,field2]>
在导入没有在第一行(即标题行)包含字段名称的 CSV 或 TSV 文件时,指定以逗号分隔的字段名称列表。
要同时指定字段类型和字段名称,请使用
--fields
与--columnsHaveTypes
。如果您在导入 JSON 数据时尝试包含
--fields
,则mongoimport
返回错误。--fields
只适用于 CSV 或 TSV 导入。
--fieldFile=<filename>
作为
--fields
的替代方案,--fieldFile
选项允许您指定一个文件,其中包含字段名称列表(如果您的 CSV 或 TSV 文件的第一行不包含字段名称)。每行放置一个字段。要同时指定字段类型和字段名,请使用
--fieldFile
选项,并带上--columnsHaveTypes
。如果您尝试在导入 JSON 数据时包含
--fieldFile
选项,mongoimport
将返回错误。--fieldFile
仅适用于 CSV 或 TSV 导入。
--ignoreBlanks
忽略 CSV 和 TSV 导出中的空字段。如果不指定,
mongoimport
将在导入的文档中创建没有值的字段。如果您尝试在导入 JSON 数据时包含
--ignoreBlanks
选项,mongoimport
将返回错误。--ignoreBlanks
仅适用于 CSV 或 TSV 导入。
--type=<json|csv|tsv>
指定要导入的文件类型。默认格式为 JSON,但也可以导入 CSV 和 TSV 文件。
csv
解析器接受符合 RFC-4180 的数据。因此,反斜杠不是一个有效的转义字符。如果你使用双引号来包围 CSV 数据中的字段,你必须通过在前面添加另一个双引号来转义内部的双引号。
--drop
修改导入过程,以便在从输入导入数据之前,目标实例删除集合及其任何相关索引。
--headerline
如果使用
--type csv
或--type tsv
,则使用第一行作为字段名。否则,mongoimport
将第一行作为独立的文档导入。如果尝试在导入JSON数据时包含
--headerline
,则mongoimport
会返回错误。--headerline
仅适用于CSV或TSV导入。
--useArrayIndexFields
新增于版本100.0.0.
在导入CSV或TSV文件时,将字段中的自然数解释为数组索引。
字段名必须采用
<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
字段来匹配集合中的文档与导入文件中的文档。要指定用于upsert
、merge
和delete
模式的现有文档匹配的字段,请使用--upsertFields
。值描述insert
upsert
合并
删除
删除数据库中与导入文件中文档匹配的现有文档。
mongoimport
对非匹配文档不执行任何操作。《删除匹配的文档》描述了如何使用--mode
delete
。新增于版本100.0.0.
--upsertFields=<field1[,field2]>
指定导入过程查询部分的字段列表。
--upsertFields
可与--mode
upsert
、merge
和delete
一起使用。如果现有文档中的
_id
字段不匹配文档中的字段,但其他字段或字段组合可以唯一地识别文档作为执行 upsert 操作的基础,请使用此选项。如果不指定字段,则
--upsertFields
将基于_id
字段执行 upsert。为确保足够的性能,您应该为使用
--upsertFields
指定的字段或字段创建索引。
--stopOnError
强制
mongoimport
在遇到第一个错误时停止插入操作,而不是继续操作即使有错误。默认情况下,当
mongoimport
遇到重复键和文档验证错误时将继续操作。为确保程序在这些错误上停止,请指定--stopOnError
.
--jsonArray
接受使用单个 JSON 数组表达的多份 MongoDB 文档的数据导入。限于 16 MB 或更小的导入。
使用
--jsonArray
与mongoexport --jsonArray
一起使用。
--legacy
表示导入的数据格式为 扩展 JSON v1 格式,而非默认的 扩展 JSON v2 格式。
提示
通常,
mongoexport
和mongoimport
的版本应该匹配。也就是说,要导入由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
可能会以任意顺序执行插入操作。
--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>)
用户缩略图.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
仅适用于 CSV 或 TSV 导入。
--parseGrace=<grace>
默认值: 停止
指定
mongoimport
在导入具有--columnsHaveTypes
的 CSV 或 TSV 文件时如何处理类型强制失败。当导入 JSON 文档时,
--parseGrace
无效。值描述自动转换
根据字段的值分配类型。例如,如果一个字段定义为double
,并且该字段的值为"foo"
,则mongoimport
将该字段值转换为字符串类型。跳过字段
对于正在导入的行,mongoimport
不包括类型与预期类型不匹配的字段。跳过行
mongoimport
不导入包含类型与预期类型不匹配的值的行。停止
mongoimport
返回错误并结束导入。