Mongodb学习(8)pymongdb的使用——数据去重

关于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

posted @ 2017-05-23 00:41  枫奇丶宛南  阅读(93)  评论(0编辑  收藏  举报