如何使用PyMongo获取指定条件下name与sourceUrl字段的去重结果?
解决方案
要对name和sourceUrl两个字段的组合去重,不能直接用distinct()方法,该方法仅支持单个字段的去重操作。你需要使用MongoDB的聚合管道实现需求,PyMongo代码如下:
pipeline = [ # 先过滤符合univ_id条件的文档,减少后续计算量 {"$match": {"univ_id": "glaacuk"}}, # 按name和sourceUrl的组合分组,天然实现组合去重 {"$group": { "_id": { "name": "$name", "sourceUrl": "$sourceUrl" } }}, # 调整输出字段格式,和常规find返回的结构保持一致 {"$project": { "name": "$_id.name", "sourceUrl": "$_id.sourceUrl", "_id": 0 }} ] data = list(data_col.aggregate(pipeline))
实现逻辑说明
$group阶段将name和sourceUrl的共同值作为分组唯一键,相同组合的文档只会保留一个分组,从而实现组合去重的效果。最终返回的data就是所有去重后的name + sourceUrl组合列表,无需额外做字段适配处理。
内容的提问来源于stack exchange,提问作者Gibin Mathew
相关产品推荐
相关产品推荐

