1. 程式人生 > >MongoDB資料庫去重操作

MongoDB資料庫去重操作

關於pymongo的去重方法, 網上找了老半天,都沒有發現單獨對pymongo裡面的資料進行去重的方法

網上說的最多的是 使用 distingct 方法進行去重操作, 但是這個方法,只是返回了去重之後的資料, 並沒有返回整個資料列表

而且並不是說執行過後, 就把資料庫中重複的內容刪除了, 因此並沒有達到我的需求

所以自己就重新嘗試著寫了一下去重的方法

def delete_repeat_data():
    import pymongo
    client = pymongo.MongoClient('localhost', 27017) 
    db = client.local
    collection = db.person
    
    for url in collection.distinct('name'):#使用distinct方法,獲取每一個獨特的元素列表
        num= collection.count({"name":url})#統計每一個元素的數量
        print (num)
        for i in range(1,num):#根據每一個元素的數量進行刪除操作,當前元素只有一個就不再刪除
            print ('delete %s %d times '% (url,i))
            #注意後面的引數, 很奇怪,在mongo命令列下,它為1時,是刪除一個元素,這裡卻是為0時刪除一個
            collection.remove({"name":url},0)
        for i in  collection.find({"name":url}):#列印當前所有元素
            print(i)
    print (collection.distinct('name'))#再次列印一遍所要去重的元素


對單個數據庫進行資料清洗

def delete_single_database_repeat_data():
    import pymongo
    client = pymongo.MongoClient('localhost', 27017) 
    db=client.GifDB #這裡是將要清洗資料的資料庫名字
    for table in  db.collection_names():
        print('table name is ',table)
        collection=db[table]
        for url in collection.distinct('gif_url'):#使用distinct方法,獲取每一個獨特的元素列表
            num= collection.count({"gif_url":url})#統計每一個元素的數量
            print (num)
            for i in range(1,num):#根據每一個元素的數量進行刪除操作,當前元素只有一個就不再刪除
                print ('delete %s %d times '% (url,i))
                #注意後面的引數, 很奇怪,在mongo命令列下,它為1時,是刪除一個元素,這裡卻是為0時刪除一個
                collection.remove({"gif_url":url},0)
            for i in  collection.find({"gif_url":url}):#列印當前所有元素
                print (i)
原文:https://blog.csdn.net/qiqiyingse/article/details/72633711