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

mongoimport 示例

本页内容

  • 简单导入
  • 导入时替换匹配的文档
  • 导入时合并匹配的文档
  • 删除匹配的文档
  • 导入JSON 导入远程主机(带认证运行)
  • CSV 导入
  • 了解更多

本页展示了以下示例mongoimport.

从系统命令行运行 mongoimport,而不是mongo 壳。

mongoimport 从使用 mongoexport 执行的备份中恢复数据库。大多数 mongoexport 的参数也适用于 mongoimport

以下示例中,mongoimport 将从 contacts.json 文件中导入 JSON 数据到 users 数据库中的 contacts 集合。

mongoimport --db=users --collection=contacts --file=contacts.json

使用 --mode upsertmongoimport 会用导入文件中的文档替换数据库中匹配的现有文档。不匹配现有数据库文档的文档将按常规插入。默认情况下,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 mergemongoimport 允许您将新记录中的字段与数据库中现有文档合并。与数据库中现有文档不匹配的文档将按常规插入。默认情况下,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 将新的 usernamelikes 字段添加到文档中,并使用导入文档中的值更新 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 deletemongoimport 将删除数据库中与导入文件中文档匹配的现有文档。与数据库中现有文档不匹配的文档将被忽略。默认情况下,mongoimport 根据文档的 _id 字段匹配文档。使用 --upsertFields 指定要匹配的字段。

注意

使用 --mode deletemongoimport 每次只删除一个匹配的现有文档。确保导入文件中的文档与数据库中的单个现有文档匹配。

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 字段来达到相同的结果。

以下示例中,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

以下示例中,mongoimport/opt/backups/contacts.csv 文件中的格式为 CSV 的数据导入到运行在本地主机端口 27017 的 MongoDB 实例上 users 数据库的 contacts 集合中。

指定 --headerline 指示 mongoimport 使用 CSV 文件的第一行来确定字段名称。

mongoimport --db=users --collection=contacts --type=csv --headerline --file=/opt/backups/contacts.csv

如果未指定 -c--collection,则 mongoimport 使用不带扩展名的输入文件名作为集合名称。因此以下示例是等效的

mongoimport --db=users --type=csv --headerline --file=/opt/backups/contacts.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==

以下操作使用 mongoimport--fields--columnsHaveTypes 选项来指定导入的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 导入,此选项在大多数情况下提供所需功能,因为它避免了将带有 null 值的字段插入到您的集合中。

以下示例导入 data.csv 中的数据,跳过任何空白字段

mongoimport --db=users --collection=contacts --type=csv --file=/example/data.csv --ignoreBlanks

新功能在版本中100.1.0.

要连接到配置为支持通过MongoDB Atlas集群,该集群已配置为通过AWS IAM凭据进行身份验证,请为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 身份验证机制$external 认证源,如以下示例所示。

如果使用 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>

注意

如果 AWS 访问密钥 ID、秘密访问密钥或会话令牌包含以下字符

: / ? # [ ] @

这些字符必须使用 百分编码 进行转换

或者,可以使用 --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环境变量在您的平台上设置这些凭据。当使用MONGODB-AWS 认证机制:

  • 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>

返回

行为

© . All rights reserved.