从csv附加到mongodb

从csv附加到mongodb,mongodb,csv,mongoimport,Mongodb,Csv,Mongoimport,我有一个mongodb,集合中有字段和电子邮件。fName,lName。我有一个csv,带有: 我想将csv数据与mongoDB数据合并,并将电子邮件作为主键。 最后一个mongo db应该有如下字段: { email:a1, fName: tom, lname: cruise, contactNo: 001, county : USA } 我可以使用mongoimport进行此操作吗?或者,如何为相同的对象编写节点/python脚本。任何链接/引用都会有帮助。从v3.4开始,mongoi

我有一个mongodb,集合中有字段和电子邮件。fName,lName。我有一个csv,带有:



我想将csv数据与mongoDB数据合并,并将电子邮件作为主键。 最后一个mongo db应该有如下字段:

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

我可以使用mongoimport进行此操作吗?或者,如何为相同的对象编写节点/python脚本。任何链接/引用都会有帮助。

从v3.4开始,
mongoimport
支持
--merge
标志。默认情况下,它在
\u id
上匹配,升级所有匹配项并插入新id。您可以使用
--upsertFields
标志指定要匹配的备用字段(例如您的案例中的
email

因此,作为一个例子:这里是一个基于您所拥有的数据的简单集合,我创建了它(我编辑了格式以使其更适合这里):

这是我的csv文件,用于导入:

email,contactNo,countryName a1,1,USA a2,2,UAE a5,5,CAN 完成后,我的数据如下所示:

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的属性
还要注意,
\u id
属性与合并无关,因为我在导入时指定了
--upsertFields
选项


阅读了解更多信息。

但如果我的csv中没有id该怎么办。我只有合同和国家?我不确定我是否理解这个问题。如果您没有
\u id
,您可以选择任何其他要合并的属性(如上所述,使用
--upsertFields
)。在MongoDB中,插入一个没有
\u id
的对象将得到一个自动生成的guid作为id。问题是mongo有id文件,但csv没有。因此,它添加了更多的文档。现在我有一张id为fname,lname的唱片,还有第二张id为contractNo,Country的唱片,我想你不明白。您不需要
\u id
,文档仅在与您指定的键字段不匹配时创建(在本例中为
email
)。我编辑了我的答案,向您展示了一个实际的示例,演示了这一点。我在csv中遗漏了一些内容。谢谢,现在答案更有用:) email,contactNo,countryName a1,1,USA a2,2,UAE a5,5,CAN
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"
}