从MongoDB 4.0中删除重复项

从MongoDB 4.0中删除重复项,mongodb,duplicates,Mongodb,Duplicates,我试图从MongoDB中删除重复项,但所有解决方案都失败了。鉴于当前的JSON结构: { "_id": { "$oid": "5cee31bbca8a185b76a692db" }, "date": { "$date": "2018-10-07T19:11:38.000Z" }, "id": "1049014405130858496", "username": "chrisoldcorn", "text": "“The #UK can rest now.

我试图从MongoDB中删除重复项,但所有解决方案都失败了。鉴于当前的JSON结构:

{
    "_id": { "$oid": "5cee31bbca8a185b76a692db" },
    "date": { "$date": "2018-10-07T19:11:38.000Z" },
    "id": "1049014405130858496",
    "username": "chrisoldcorn",
    "text": "“The #UK can rest now. The Orange Buffoon is back in his xenophobic #WhiteHouse!” #news #politics #trump #populist #uspoli #ukpolitics #ukpoli #london #scotland #TrumpBaby #usa #america #canada #eu #europe #brexit #maga #msm #gop #elections #election2018 https://medium.com/@chrisoldcorn/trump-babys-uk-visit-a-reflection-1c2aa4ad942 …pic.twitter.com/Y6Yihs9g6K",
    "retweets": 1,
    "favorites": 0,
    "mentions": "@chrisoldcorn",
    "hashtags": "#UK #WhiteHouse #news #politics #trump #populist #uspoli #ukpolitics #ukpoli #london #scotland #TrumpBaby #usa #america #canada #eu #europe #brexit #maga #msm #gop #elections #election2018",
    "geo": "",
    "replies": 0,
    "to": null,
    "lan": "en"
}
我需要根据文件中的字段“id”删除所有重复项

我试过
db.tweets.ensureIndex({id:1},{unique:true,dropDups:true})
,但我不确定这是正确的方法。我获得以下输出:


有人能帮我吗

看起来您正在运行版本>3.0的MongoDB,因此无法通过确保索引来删除DUP

根据报告:

在版本3.0中更改:dropDups选项不再可用

最快的方法是

  • 创建一个
  • 放弃收藏
  • 创建新索引
  • 垃圾场
  • 在还原插入期间,将删除所有重复文档


    下一个最好的解决方案是运行一个脚本来收集所有重复的id并删除它们

    @SergioTulentsev如果他说id不是id,只需查看他发布的模式即可。@anto您想如何确定哪些文档是“原始”文档?或者只要1还存在,它就不重要了?@Tomslabaert啊,的确如此。@Tomslabaert没有一个原始的。重要的是在副本之间只保存一个文档。@Anto:在这种情况下,索引应该可以正常工作。
    mongorestore
    确实会抱怨索引冲突,但仍然会删除有问题的文档(并继续此过程)