mongo数据库查重

查找该集合中是否有重复数据,并选择是否进行删除操作

"""
此程序用来检查集合中是否有重复的数据
"""
import ast

import pymongo


def check():
    print('*' * 100)
    print('检查集合中是否有重复数据!')
    ip = input('请输入数据库ip:')
    client = pymongo.MongoClient('mongodb://%s:27017' % ip)
    db_name = input('请输入要操作的数据库名:')
    db = client[db_name]
    if ip == '192.168.0.123':
        db.authenticate(name='用户名', password='密码', source='admin')
    # 获取所有集合名称
    col_li = db.collection_names()
    print(col_li)

    while True:
        col = input('请输入集合名(退出输入q):')
        if col == 'q':
            break
        print('正在查询...')
        collection = db[col]

        all_datas = []
        repeat_datas = []
        i = 0
        for d in collection.find():
            del d['_id']
            if str(d) not in all_datas:
                all_datas.append(str(d))
            else:
                repeat_datas.append(str(d))
                i += 1
        print('共有%s条重复数据!' % i)
        if i > 0:
            is_del = input('是否删除重复数据(输入 y/n):')
            if is_del == 'y':
                for r_d in repeat_datas:
                    # 先将其转为dict
                    data = ast.literal_eval(r_d)
                    collection.delete_one(data)
                print('删除完成!')
        print('*' * 100)


if __name__ == '__main__':
    check()

当然还可以使用聚合函数根据指定字段进行去重

根据firstField、secondField来查重
db.collection.aggregate([
  { $group: { 
    _id: { firstField: "$firstField", secondField: "$secondField" }, 
    uniqueIds: { $addToSet: "$_id" },
    count: { $sum: 1 } 
  }}, 
  { $match: { 
    count: { $gt: 1 } 
  }}
])

你可能感兴趣的:(mongo数据库查重)