搜尋

首頁  >  問答  >  主體

mongodb 無法透過設定 dropDups : true 建立唯一索引?

資料庫中的一個欄位已經存在相同的值,想為這個欄位建立一個唯一索引,並刪除多餘的數據,於是建立索引時設定了dropDups 為true,但還是報錯重複key,是怎麼回事呀?或者有什麼方法可以快速刪除多餘的資料呢?

迷茫迷茫2775 天前780

全部回覆(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
  • 取消回覆