首页  >  问答  >  正文

mongodb 无法通过设置 dropDups : true 建立唯一索引?

数据库中的一个字段已经存在相同的值,想给这个字段建立一个唯一索引,并删除多余的数据,于是建立索引时设置了dropDups 为true,但还是报错重复key,是怎么回事呀?或者有什么方法能快速删除多余的数据呢?

迷茫迷茫2756 天前766

全部回复(5)我来回复

  • 过去多啦不再A梦

    过去多啦不再A梦2017-04-28 09:05:35

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-04-28 09:05:35

    可以通过python脚本删除重复

    from pymongo import MongoClient
    client = MongoClient()
    db = client.dbname
    documentname = db.documentname
    
    keys = {}
    for k in documentname.find():
        key = k['field']
        if keys.has_key(key):
            print 'duplicate key %s' % key
            documentname.remove({'_id':k['_id']})
        else:
            print 'first record key %s' % key
            keys[key]=1
    
    

    思路很简单,遍历并用dict存储,第二次遇到时删除。
    但这样无法控制删除与保留的对象,具体可以根据你的场景调整脚本

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-04-28 09:05:35

    我也遇到这个情况了,不知道怎么解决,能指点一下吗

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-28 09:05:35

    当数据有10W条以上的时候,通过脚本可以很快的处理吗?还有多并发的时候,脚本是如何处理的?

    回复
    0
  • PHP中文网

    PHP中文网2017-04-28 09:05:35

    mongoDB3.0废弃dropDups参数,以后不能通过这个删除重复数据了。

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4865696&uid=15795819

    回复
    0
  • 取消回复