Python如何对PyMongo查询得到的JSON对象列表按指定字段去重
实现方案分为两种,你可以根据业务场景选择:
方案1:MongoDB查询阶段直接去重(推荐,性能更高)
直接在查询时用聚合管道的$group阶段按album字段分组,避免全量数据拉取到本地再处理,适合数据量较大的场景:
from pymongo import MongoClient client = MongoClient('你的MongoDB连接串') db = client['你的库名'] col = db['你的集合名'] # 聚合查询按album去重,保留每个album对应的第一条记录的所有字段 pipeline = [ { "$group": { "_id": "$album", "doc": {"$first": "$$ROOT"} # 如果你只要特定字段可以自行指定,比如filepath: {"$first": "$filepath"} } }, # 可选:把文档结构还原为原始格式 { "$replaceRoot": {"newRoot": "$doc"} } ] dedup_result = list(col.aggregate(pipeline))
如果不需要保留完整文档,只需要拿到所有不重复的album值,直接用distinct方法更简单:
unique_albums = col.distinct("album")
方案2:Python内存中对已查询到的列表去重
如果已经把所有数据拉取到了本地Python列表里,可以用集合记录已经出现过的album值,遍历一次列表就能完成去重:
# 假设你查询到的原始列表是raw_data seen_albums = set() dedup_data = [] for item in raw_data: album_val = item.get("album") if album_val not in seen_albums: seen_albums.add(album_val) dedup_data.append(item)
这种方式默认保留第一个出现对应album值的记录,如果你需要保留特定规则的记录(比如filepath后缀为flac的优先),在判断是否加入列表时补充对应的校验规则即可。
内容的提问来源于stack exchange,提问作者Geoffrey Mungai
相关产品推荐
相关产品推荐

