You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:03