如何通过PyMongo获取MongoDB中重复记录的完整文档?
PyMongo 获取完整重复文档解决方案
你的现有聚合查询只保留了分组字段和重复计数,没有保存原始文档数据。要获取包含所有字段的完整重复文档,需要调整$group阶段来留存原始文档,再通过后续操作展开输出:
修改后的代码如下:
collection.aggregate([ # 按描述和价格分组,同时保存每组内的所有完整文档 {"$group": { "_id": {"des": "$Descreption", "price": "$NewPrice"}, "count": {"$sum": 1}, "docs": {"$push": "$$ROOT"} # 用$$ROOT存储当前分组的完整原始文档 }}, # 过滤掉描述/价格为null、且重复数不超过1的分组 {"$match": {"_id.des": {"$ne": None}, "_id.price": {"$ne": None}, "count": {"$gt": 1}}}, # 将保存的文档数组拆分为单个文档条目 {"$unwind": "$docs"}, # 将展开后的原始文档设为输出的根文档 {"$replaceRoot": {"newRoot": "$docs"}} ])
各阶段说明:
- $group:通过
$push: "$$ROOT"把每个分组下的完整原始文档存入docs数组,同时统计该分组的重复次数。 - $match:精准过滤掉描述或价格为空的无效分组,只保留重复次数大于1的分组。
- $unwind:把
docs数组拆解,让每个重复的原始文档单独成为一条结果。 - $replaceRoot:将原始文档设为输出的根结构,最终得到的就是包含所有字段的完整重复文档。
内容的提问来源于stack exchange,提问作者chintan bhimani
相关产品推荐
相关产品推荐

