MongoDB Atlas UI聚合管道如何实现指定字段distinct去重查询
Mongo Atlas 聚合管道实现指定字段去重
你已经完成聚合管道前置数据过滤的前提下,直接在现有管道末尾追加对应阶段即可实现类似SQL select distinct(字段) 的去重效果,不需要重写整段逻辑。
方案1:返回多条去重值文档(和你给出的预期输出格式匹配)
追加$group阶段,将分组主键_id设置为你需要去重的目标字段即可,针对你给出的示例(要取country字段去重值),阶段配置如下:
{ $group: { _id: "$country" } }
如果不需要返回_id键,想直接输出带目标字段名的结果,就在后面再追加一个$project阶段:
{ $project: { _id: 0, country: "$_id" } }
执行后就能拿到3条结果,分别对应UAE、IN、NL,和你给出的预期结果完全一致。如果要去重的是其他字段(比如你举例SQL里的ID字段),只需要把上面配置里的$country换成$对应字段名即可。
方案2:直接返回全量去重值数组
如果你不想拿到多条分散的文档,想一次性拿到所有去重值组成的数组,就追加如下$group阶段:
{ $group: { _id: null, distinct_list: { $addToSet: "$country" } } }
执行后会返回单条文档,其中distinct_list字段就是去重后的值数组:["UAE", "IN", "NL"],适合需要直接拿全量去重值做后续处理的场景。
操作注意点
- 在Atlas UI操作时直接点现有管道最后一个阶段后的「Add Stage」按钮,选择对应操作符填入配置即可,右侧预览区会实时展示结果,不需要手写整段聚合代码
- 不要直接使用整表级别的
distinct()命令,该命令无法叠加你之前已经配置好的前置过滤规则,只能返回全表的去重结果,不符合你的使用场景
内容的提问来源于stack exchange,提问作者Waseem Mir
相关产品推荐
相关产品推荐

