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