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