mongoimport 示例
本页显示 mongoimport
的示例。
从系统命令行运行 mongoimport
,而非 mongo
shell。
简单导入
mongoimport
从使用 mongoexport
创建的备份还原数据库。mongoexport
的大部分论据在 mongoimport
中也同样存在。
在下面的示例中,mongoimport
将 JSON 数据从 contacts.json
文件导入 users
数据库中的 contacts
集合。
mongoimport --db=users --collection=contacts --file=contacts.json
在导入期间替换匹配的文件
通过使用 --mode
upsert
,mongoimport
会将数据库中与导入文件中的文档匹配的现有文档替换为导入文件中的文档。与数据库中现有文档不匹配的文档将照常插入。默认情况下,mongoimport
会根据 _id
字段来匹配文档。使用 --upsertFields
指定要与之进行匹配的字段。
考虑 example
数据库的 people
集合中的以下文档:
{ "_id" : ObjectId("580100f4da893943d393e909"), "name" : "Crystal Duncan", "region" : "United States", "email" : "crystal@example.com" }
以下文档存在于 people-20160927.json
JSON 文件中。JSON 对象的 _id
字段与 people
集合中文档的 _id
字段相匹配。
{ "_id" : ObjectId("580100f4da893943d393e909"), "username" : "crystal", "likes" : [ "running", "pandas", "software development" ] }
要导入 people-20160927.json
文件并替换数据库中与导入文件中的文档匹配的文档,请指定 --mode
upsert
,如下所示:
mongoimport -c=people -d=example --mode=upsert --file=people-20160927.json
然后,people
集合中的文档将仅包含导入文档中的字段,如下所示:
{ "_id" : ObjectId("580100f4da893943d393e909"), "username" : "crystal", "likes" : [ "running", "pandas", "software development" ] }
在导入过程中合并匹配的文档
使用 --mode
merge
,mongoimport
使您能够将新记录中的字段与数据库中的现有文档合并。与数据库中现有文档不匹配的文档将照常插入。默认情况下,mongoimport
会根据 _id
字段来匹配文档。使用 --upsertFields
指定要匹配的字段。
example
数据库中的 people
集合包含以下文档:
{ "_id" : ObjectId("580100f4da893943d393e909"), "name" : "Crystal Duncan", "region" : "United States", "email" : "crystal@example.com" }
以下文档存在于 people-20160927.json
JSON 文件中。JSON 对象的 _id
字段与 people
集合中文档的 _id
字段相匹配。
{ "_id" : ObjectId("580100f4da893943d393e909"), "username" : "crystal", "email": "crystal.duncan@example.com", "likes" : [ "running", "pandas", "software development" ] }
如需导入 people-20160927.json
文件并将导入文件中的文档与数据库中的匹配文档合并,请指定 --mode
merge
,如下所示:
mongoimport -c=people -d=example --mode=merge --file=people-20160927.json
导入操作会将 JSON 文件中的字段与数据库中的原始文档相结合,从而根据 _id
字段来匹配这些文档。导入过程中,mongoimport
会向此文档添加新的 username
和 likes
字段,并使用导入文档中的值更新 email
字段,如下所示:
{ "_id" : ObjectId("580100f4da893943d393e909"), "name" : "Crystal Duncan", "region" : "United States", "email" : "crystal.duncan@example.com", "username" : "crystal", "likes" : [ "running", "pandas", "software development" ] }
删除匹配文档
100.0.0 版本新增。
使用 --mode
delete
,mongoimport
删除数据库中与导入文件中的文档匹配的现有文档。与数据库中现有文档不匹配的文档将予以忽略。默认情况下,mongoimport
会根据 _id
字段来匹配文档。使用 --upsertFields
指定要匹配的字段。
注意
通过使用 --mode
delete
,mongoimport
每次匹配仅会删除一个现有文档。请确保导入文件中的文档与数据库中的单个现有文档匹配。
example
数据库中的 people
集合包含以下文档:
{ "_id" : ObjectId("580100f4da893943d393e909"), "name" : "Crystal Duncan", "region" : "United States", "email" : "crystal@example.com", "employee_id" : "5463789356" }
以下文档存在于 people-20160927.json
JSON 文件中。JSON 对象的 _id
字段与 people
集合中文档的 _id
字段相匹配。
{ "_id" : ObjectId("580100f4da893943d393e909"), "username" : "crystal", "email": "crystal.duncan@example.com", "likes" : [ "running", "pandas", "software development" ], "employee_id" : "5463789356" }
要删除数据库中与 people-20160927.json
文件内的文档匹配的文档,请指定 --mode
delete
,如下所示:
mongoimport -c=people -d=example --mode=delete --file=people-20160927.json
由于数据库与输入文件中的 _id
字段相匹配,因此 mongoimport
会从 people
集合中删除匹配的文档。使用 --upsertFields
来指定 employee_id
字段也可实现相同的结果,因为该字段也会在数据库与输入文件之间进行匹配。
JSON
将 导入到使用身份验证运行的远程主机
在以下示例中,mongoimport
将数据从文件 /opt/backups/mdb1-examplenet.json
导入到启用身份验证的远程 MongoDB 数据库上的数据库 marketing
中的 contacts
集合中。
mongoimport
通过端口37017
连接到主机mongodb1.example.net
上运行的mongod
实例。 它使用用户名user
进行身份验证;该示例省略了--password
选项,以让mongoimport
提示输入密码:
mongoimport --host=mongodb1.example.net --port=37017 --username=user --collection=contacts --db=marketing --file=/opt/backups/mdb1-examplenet.json
CSV
导入
常规 CSV 导入
在以下示例中,mongoimport
将 /opt/backups/contacts.csv
文件中的 CSV 格式数据导入 MongoDB 实例 users
数据库的 contacts
集合中,MongoDB 实例运行的本地主机端口号为 27017
。
指定 --headerline
会指示 mongoimport
使用 CSV 文件的第一行确定字段名称。
mongoimport --db=users --collection=contacts --type=csv --headerline --file=/opt/backups/contacts.csv
mongoimport
如果未指定-c
或--collection
,则使用不带扩展名的输入文件名作为集合名称。 因此,以下示例是等效的:
mongoimport --db=users --type=csv --headerline --file=/opt/backups/contacts.csv
导入具有指定字段类型的 CSV
指定字段名时,您还可以指定数据类型。如要指定字段名和类型,请包含 --columnsHaveTypes
及以下任意一项:--fields
、--fieldFile
或 --headerline
。
以 <colName>.<type>(<arg>)
形式指定字段名称和数据类型。
例如,/example/file.csv
包含以下数据:
Katherine Gray, 1996-02-03, false, 1235, TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg== Albert Gilbert, 1992-04-24, true, 13, Q3VwY2FrZSBpcHN1bSBkb2xvciBzaXQgYW1ldCB0b290c2llIHJvbGwgYm9uYm9uIHRvZmZlZS4gQ2FuZHkgY2FuZXMgcGllIGNyb2lzc2FudCBjaG9jb2xhdGUgYmFyIGxvbGxpcG9wIGJlYXIgY2xhdyBtYWNhcm9vbi4gU3dlZXQgcm9sbCBjdXBjYWtlIGNoZWVzZWNha2Ugc291ZmZsw6kgYnJvd25pZSBpY2UgY3JlYW0uIEp1anViZXMgY2FrZSBjdXBjYWtlIG1hY2Fyb29uIGRhbmlzaCBqZWxseS1vIHNvdWZmbMOpLiBDYWtlIGFwcGxlIHBpZSBnaW5nZXJicmVhZCBjaG9jb2xhdGUgc3VnYXIgcGx1bS4gU3dlZXQgY2hvY29sYXRlIGNha2UgY2hvY29sYXRlIGNha2UganVqdWJlcyB0aXJhbWlzdSBvYXQgY2FrZS4gU3dlZXQgc291ZmZsw6kgY2hvY29sYXRlLiBMaXF1b3JpY2UgY290dG9uIGNhbmR5IGNob2NvbGF0ZSBtYXJzaG1hbGxvdy4gSmVsbHkgY29va2llIGNha2UgamVsbHkgYm==
以下操作使用带有 --fields
和 --columnsHaveTypes
选项的 mongoimport
来指定导入的 CSV 数据的字段名称和 BSON 类型。
mongoimport --db=users --collection=contacts --type=csv \ --columnsHaveTypes \ --fields="name.string(),birthdate.date(2006-01-02),contacted.boolean(),followerCount.int32(),thumbnail.binary(base64)" \ --file=/example/file.csv
忽略空白字段
使用 --ignoreBlanks
选项以忽略空白字段。对于 CSV 和 TSV 导入,该选项可在大多数情况下提供所需的功能,因为它可以避免在集合中插入具有空值的字段。
以下示例将从 data.csv
导入此数据,并跳过所有空白字段:
mongoimport --db=users --collection=contacts --type=csv --file=/example/data.csv --ignoreBlanks
使用 AWS IAM 档案连接到 MongoDB Atlas 集群
100.1.0 版本新增。
要连接到已配置为支持通过MongoDB Atlas Amazon Web ServicesAmazon Web Services IAM 凭证进行身份验证的 集群,请执行 6} ,为 提供一个connection string
mongoimport
,类似于以下内容:
mongoimport 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' <other options>
以这种方式使用 AWS IAM 凭证连接 Atlas 时,会使用 MONGODB-AWS
authentication mechanism
和 $external
authSource
,如本示例所示。
如果还使用 AWS 会话令牌,请为其提供 AWS_SESSION_TOKEN
authMechanismProperties
值,如下所示:
mongoimport 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>' <other options>
注意
或者,可以使用 --username
、--password
和 --awsSessionToken
选项在连接字符串外部提供 AWS 访问密钥 ID、私有访问密钥和可选会话令牌,如下所示:
mongoimport 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' --username <aws access key id> --password <aws secret access key> --awsSessionToken <aws session token> <other options>
当作为命令行参数提供时,这三个选项无需进行百分号编码。
还可以使用标准 AWS IAM 环境变量在平台上设置这些凭证。mongoimport
在使用 MONGODB-AWS
authentication mechanism
时会检查以下环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
如果设置,则无需在连接字符串中或通过其显式选项指定这些档案。
注意
如果选择使用 AWS 环境变量来指定这些值,则无法与这些凭证的相应显式选项或连接字符串选项进行混合和匹配。使用针对访问密钥 ID和秘密访问密钥(以及会话令牌,如果已使用)的环境变量,或是使用显式或连接字符串选项来指定其中每一个档案。
以下示例会在 bash
Shell 中设置这些环境变量:
export AWS_ACCESS_KEY_ID='<aws access key id>' export AWS_SECRET_ACCESS_KEY='<aws secret access key>' export AWS_SESSION_TOKEN='<aws session token>'
其他 Shell 会使用其他语法来设置环境变量。 有关更多信息,请参阅您的平台所对应的文档。
您可以使用以下命令验证这些环境变量是否已设置:
env | grep AWS
一旦制定,以下示例将使用这些环境变量连接到 MongoDB Atlas 集群:
mongoimport 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' <other options>