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

mongoimport 示例

在此页面上

  • 简单导入
  • 在导入期间替换匹配的文件
  • 在导入过程中合并匹配的文档
  • 删除匹配文档
  • JSON导入到使用身份验证运行的远程主机
  • CSV 导入
  • 了解详情

本页显示 mongoimport的示例。

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

mongoimport 从使用 mongoexport 创建的备份还原数据库。mongoexport 的大部分论据在 mongoimport 中也同样存在。

在下面的示例中,mongoimportJSON 数据从 contacts.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 文件内的文档匹配的文档,请指定 --modedelete,如下所示:

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 格式数据导入 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

指定字段名时,您还可以指定数据类型。如要指定字段名和类型,请包含 --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 选项以忽略空白字段。对于 CSVTSV 导入,该选项可在大多数情况下提供所需的功能,因为它可以避免在集合中插入具有空值的字段。

以下示例将从 data.csv 导入此数据,并跳过所有空白字段:

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

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>

注意

如果 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 环境变量在平台上设置这些凭证。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>

后退

行为

来年

mongoexport