數(shù)據(jù)庫(kù)中的一個(gè)字段已經(jīng)存在相同的值,想給這個(gè)字段建立一個(gè)唯一索引,并刪除多余的數(shù)據(jù),于是建立索引時(shí)設(shè)置了dropDups 為true,但還是報(bào)錯(cuò)重復(fù)key,是怎么回事呀?或者有什么方法能快速刪除多余的數(shù)據(jù)呢?
業(yè)精于勤,荒于嬉;行成于思,毀于隨。
可以通過(guò)python腳本刪除重復(fù)
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
思路很簡(jiǎn)單,遍歷并用dict存儲(chǔ),第二次遇到時(shí)刪除。
但這樣無(wú)法控制刪除與保留的對(duì)象,具體可以根據(jù)你的場(chǎng)景調(diào)整腳本
當(dāng)數(shù)據(jù)有10W條以上的時(shí)候,通過(guò)腳本可以很快的處理嗎?還有多并發(fā)的時(shí)候,腳本是如何處理的?
mongoDB3.0廢棄dropDups參數(shù),以后不能通過(guò)這個(gè)刪除重復(fù)數(shù)據(jù)了。
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4865696&uid=15795819