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 

猜你喜欢

转载自blog.csdn.net/cyq15539975613/article/details/83652798