【问题标题】:Mongo - Merge Duplicate Entries In A Collection And Remove Old EntriesMongo - 合并集合中的重复条目并删除旧条目
【发布时间】:2019-05-27 04:06:54
【问题描述】:

我正在尝试将读取数百万个 CSV 文件的旧数据库迁移到 Mongodb。旧数据库有数百万个条目,基本上我想要的是新数据库有这三个字段 - 联系人姓名、电子邮件和联系号码。我将从数百个不同格式的 CSV 文件中读取这些信息。我编写了一个 python 脚本,它将从这些文件中提取信息并将它们放入一个新的 csv 文件中,布局如下:

电子邮件:姓名:Contact_No

我遇到的问题是,其中一些电子邮件存在于多个 CSV 文件中,并且可能有多个不同的联系号码。当我使用 mongoimport 命令导入这些 CSV 文件时,同一封电子邮件可能有多个条目。

我正在尝试在主集合中创建一个条目,其格式如下:

{
  Email:samplemail@xxx.com
  Name: John Doe
  Phone: [
           12345678,
           23456789,
           12354677,
         ]

}

我对 Mongo 很陌生,所以我希望有更多洞察力和经验的人能够建议我当前实施的替代解决方案。

********************* 当前实现 ************************ *

目前我通过以下 4 个步骤将 CSV 文件导入数据库。

  1. 使用 mongo import 命令导入数据库

mongoimport -d Master_Contacts -c Master_Collection --type csv --file '/root/Documents/log.csv' --columnsHaveTypes --fields "Email.string(),Name.string(),Number.string()" --numInsertionWorkers 8

这似乎工作正常。我可以在大约 2 分钟内导入大约 160 万个条目,而只分配了 8GB 的​​内存。

  1. 删除重复项

我目前删除重复项的实现如下。我使用聚合函数来查找同一电子邮件的多个条目-> 查找具有该电子邮件和相关号码的所有条目,然后使用以下命令将它们输出到称为重复的新集合:

db.Master_Collection.aggregate([{$group: {_id: {email:"$email"},count: { "$sum":1 },number:{$addToSet:"$number"}}},{ $match: {count: { "$gt": 1 }}}, {$out:"duplicates"}],{allowDiskUse:true})

然后我使用以下命令从原始集合中删除这些结果:

db.Master_Collection.aggregate([{$group: {_id: {email:"$email"},count: { "$sum":1 },number:{$addToSet:"$number"}}},{ $match: {count: { "$gt": 1 }}}],{allowDiskUse:true}).forEach(function(doc){print(db.Master_Collection.remove({"email":doc._id.email}))});
  1. 将重复集合中的所有条目插入原始集合中

然后我再次遍历重复集合并将所有条目插入到主集合中。然而,这似乎非常低效且耗时。

谁能提供建议或替代解决方案。

提前谢谢大家

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我建议您在插入目标表之前聚合重复项。您可以在 Python 脚本中执行此操作,最好在内存中收集重复的联系信息并将其存储在字典中的相应条目中。

    然后批量插入您的字典。

    这些更少的步骤和更少的 I/O 操作应该可以满足您想要的更好的性能。

    【讨论】:

    • 我试过了。花费了更长的时间。另外,可能会有多人进一步上传这些文件。所以理想情况下我需要它清理服务器端
    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2017-04-14
    相关资源
    最近更新 更多