从csv附加到mongodb

时间:2018-03-07 14:47:10

标签: mongodb csv mongoimport

我有一个mongodb,收集有字段电子邮件。 fName,lName。我有一个csv:

email | contactNo | countryName
a1    | 001       | USA        
a2    | 002       | UAE        

我想将csv Data与mongoDB数据合并为电子邮件作为主键。 最终的mongo db应该包含以下字段:

{
email:a1,
fName: tom,
lname: cruise,
contactNo: 001,
county : USA
}

我可以使用mongoimport吗?或者我如何编写节点/ python脚本。任何链接/参考都会有所帮助。

1 个答案:

答案 0 :(得分:1)

从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 stackoverflow --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
  • 中没有匹配的数据
  • 第四个文件是全新的,仅包含来自csv
  • 的属性

另请注意,_id属性与合并无关,因为我在导入时指定了--upsertFields选项。

阅读here了解详情。