mongoimport 示例
本页展示了以下示例mongoimport.
从系统命令行运行 mongoimport,而不是mongo 壳。
简单导入
mongoimport 从使用 mongoexport 执行的备份中恢复数据库。大多数 mongoexport 的参数也适用于 mongoimport。
以下示例中,mongoimport 将从 contacts.json 文件中导入 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 的数据导入到运行在本地主机端口 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
导入指定字段类型的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
使用AWS IAM凭据连接到MongoDB Atlas集群
新功能在版本中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>
注意
或者,可以使用 --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_IDAWS_SECRET_ACCESS_KEYAWS_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>