gpt4 book ai didi

mongodb - 从 csv 追加到 mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:39:25 25 4
gpt4 key购买 nike

我有一个带有电子邮件字段的集合的 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 执行此操作吗?或者我如何为它编写一个节点/python 脚本。任何链接/引用都会有所帮助。

最佳答案

从 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,countryNamea1,1,USAa2,2,UAEa5,5,CAN

I now import with the following, specifying the email property as the property to key on (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获取更多信息。

关于mongodb - 从 csv 追加到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com