python查询MongoDB数据库中重复数据的标题和数量以及删除重复项只保留最新一个

from urllib.parse import quote_plus
import pymongo

connection_string = "mongodb://localhost:27017"
client = pymongo.MongoClient(connection_string)
db = client['spider']
collection = db['analyzed_books']

# 定义聚合管道,找出每个重复组中需要保留的最后一个文档的_id
pipeline = [
    {"$sort": {"_id": -1}},  # 按照_id降序排序,假设_id是自增的,这样最新的文档会在前面
    {"$group": {
        "_id": "$ocr_content",
        "last_doc_id": {"$first": "$_id"}  # 在每个分组中选择第一个文档的_id,即最新的文档的_id
    }},
    {"$match": {"last_doc_id": {"$ne": None}}}  # 筛选出有last_doc_id的分组
]

# 执行聚合查询,获取需要保留的文档的_id列表
results = collection.aggregate(pipeline)
ids_to_keep = [result['last_doc_id'] for result in results]

# 删除不在ids_to_keep中的文档
collection.delete_many({"_id": {"$nin": ids_to_keep}})

print("重复数据已删除,只保留了每个重复组中的最后一个文档。")

 

posted @ 2024-11-13 16:09  布都御魂  阅读(53)  评论(0)    收藏  举报