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("重复数据已删除,只保留了每个重复组中的最后一个文档。")