如何使用python从mongodb中删除重复文档?

2024-10-01 07:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了很多脚本来删除mongodb集合中的重复行,但都不适用于我,我能在这里找到人帮助我吗。

from pymongo import MongoClient
client = MongoClient()
client = MongoClient("mongodb://localhost:27017/") 
mydb = client.bafin
myCollection = mydb.officier

Tags: fromimport脚本clientlocalhostmongodbmongoclientpymongo
1条回答
网友
1楼 · 发布于 2024-10-01 07:29:50

这是一种比较单个集合中任何类型数据并删除重复数据的通用方法。如果你有一个巨大的数据集,有更好的方法来实现这一点,但这应该是通用的

它以JSON格式获取记录的md5哈希,并将其与以前找到的数据进行比较。任何匹配项和记录都将被删除。删除哪个版本是任意的;如果需要,可以在初始查找中指定排序

小心使用-这会删除数据

from pymongo import MongoClient
from hashlib import md5
from bson.json_util import dumps

db = MongoClient()['mydatabase']

db.mycollection.insert_many([{'name': 'same'},
                             {'name': 'same'},
                             {'name': 'different'},
                             {'name': 'same'},
                             {'name': 'same'}])

record_hashes = set()

for record in db.mycollection.find():
    record_id = record.pop('_id')
    record_hash = md5(dumps(record).encode("utf-8")).hexdigest()

    if record_hash in record_hashes:
        db.mycollection.delete_one({'_id': record_id})
    else:
        record_hashes.add(record_hash)

for record in db.mycollection.find():
    print(record)

印刷品:

{'_id': ObjectId('6054fb89c9cac53fbea4e130'), 'name': 'same'}
{'_id': ObjectId('6054fb89c9cac53fbea4e132'), 'name': 'different'}

相关问题 更多 >