从 csv 追加到 mongodb
Append to mongodb from csv
我有一个 mongodb,其中的集合有电子邮件字段。 fName,lName。我有一个 csv :
email | contactNo | countryName
a1 | 001 | USA
a2 | 002 | UAE
我想将 csv 数据与 mongoDB 数据合并,并将电子邮件作为主键。
最终的 mongo 数据库应该有如下字段:
{
email:a1,
fName: tom,
lname: cruise,
contactNo: 001,
county : USA
}
我可以使用 mongoimport 执行此操作吗?或者我如何编写一个 node/python 脚本。任何 link/refrence 都会有所帮助。
从 v3.4 开始,mongoimport
支持 --merge
标志。默认情况下,它匹配 _id
,更新任何匹配项并插入新的 ID。您可以使用 --upsertFields
标志指定要匹配的备用字段(例如您的 email
)。
因此,举个例子:这是我创建的一个简单集合,它基于您拥有的数据(我编辑了格式以使其更适合此处):
db.contacts.find()
{
"_id" : ObjectId("5aa019b79259d12040e7107b"),
"fname" : "tom", "lname" : "cruise", "email" : "a1"
}
{
"_id" : ObjectId("5aa019bb9259d12040e7107c"),
"fname" : "bob", "lname" : "smith", "email" : "a2"
}
{
"_id" : ObjectId("5aa019be9259d12040e7107d"),
"fname" : "jane", "lname" : "jones", "email" : "a3"
}
这是我的 csv 文件,用于导入:
email,contactNo,countryName
a1,1,USA
a2,2,UAE
a5,5,CAN
我现在导入以下内容,指定 email
属性 作为要键入的 属性 (not _id
):
mongoimport --mode merge --headerline --upsertFields email
--db Whosebug --collection contacts --file ~/import.csv --type csv
完成后,我的数据现在如下所示:
db.contacts.find().pretty()
{
"_id" : ObjectId("5aa019b79259d12040e7107b"),
"fname" : "tom", "lname" : "cruise", "email" : "a1",
"contactNo" : 1, "countryName" : "USA"
}
{
"_id" : ObjectId("5aa019bb9259d12040e7107c"),
"fname" : "bob", "lname" : "smith", "email" : "a2",
"contactNo" : 2, "countryName" : "UAE"
}
{
"_id" : ObjectId("5aa019be9259d12040e7107d"),
"fname" : "jane", "lname" : "jones", "email" : "a3"
}
{
"_id" : ObjectId("5aa019d17cd320319146756d"),
"email" : "a5",
"contactNo" : 5, "countryName" : "CAN"
}
注意:
- 前两个文档已扩充以包含来自 csv 的数据
- 第三个文档未被修改,因为 csv 中没有匹配的数据
- 第四个文档是 brand-new,仅包含来自 csv
的属性
另请注意,_id
属性 与合并无关,因为我在导入时指定了 --upsertFields
选项。
阅读 here 了解更多信息。
我有一个 mongodb,其中的集合有电子邮件字段。 fName,lName。我有一个 csv :
email | contactNo | countryName
a1 | 001 | USA
a2 | 002 | UAE
我想将 csv 数据与 mongoDB 数据合并,并将电子邮件作为主键。 最终的 mongo 数据库应该有如下字段:
{
email:a1,
fName: tom,
lname: cruise,
contactNo: 001,
county : USA
}
我可以使用 mongoimport 执行此操作吗?或者我如何编写一个 node/python 脚本。任何 link/refrence 都会有所帮助。
从 v3.4 开始,mongoimport
支持 --merge
标志。默认情况下,它匹配 _id
,更新任何匹配项并插入新的 ID。您可以使用 --upsertFields
标志指定要匹配的备用字段(例如您的 email
)。
因此,举个例子:这是我创建的一个简单集合,它基于您拥有的数据(我编辑了格式以使其更适合此处):
db.contacts.find()
{
"_id" : ObjectId("5aa019b79259d12040e7107b"),
"fname" : "tom", "lname" : "cruise", "email" : "a1"
}
{
"_id" : ObjectId("5aa019bb9259d12040e7107c"),
"fname" : "bob", "lname" : "smith", "email" : "a2"
}
{
"_id" : ObjectId("5aa019be9259d12040e7107d"),
"fname" : "jane", "lname" : "jones", "email" : "a3"
}
这是我的 csv 文件,用于导入:
email,contactNo,countryName a1,1,USA a2,2,UAE a5,5,CAN
我现在导入以下内容,指定 email
属性 作为要键入的 属性 (not _id
):
mongoimport --mode merge --headerline --upsertFields email
--db Whosebug --collection contacts --file ~/import.csv --type csv
完成后,我的数据现在如下所示:
db.contacts.find().pretty()
{
"_id" : ObjectId("5aa019b79259d12040e7107b"),
"fname" : "tom", "lname" : "cruise", "email" : "a1",
"contactNo" : 1, "countryName" : "USA"
}
{
"_id" : ObjectId("5aa019bb9259d12040e7107c"),
"fname" : "bob", "lname" : "smith", "email" : "a2",
"contactNo" : 2, "countryName" : "UAE"
}
{
"_id" : ObjectId("5aa019be9259d12040e7107d"),
"fname" : "jane", "lname" : "jones", "email" : "a3"
}
{
"_id" : ObjectId("5aa019d17cd320319146756d"),
"email" : "a5",
"contactNo" : 5, "countryName" : "CAN"
}
注意:
- 前两个文档已扩充以包含来自 csv 的数据
- 第三个文档未被修改,因为 csv 中没有匹配的数据
- 第四个文档是 brand-new,仅包含来自 csv 的属性
另请注意,_id
属性 与合并无关,因为我在导入时指定了 --upsertFields
选项。
阅读 here 了解更多信息。