MongoDB聚合查询问题:返回uniqueKey重复的指定字段文档
MongoDB 查找重复uniqueKey并返回指定字段的聚合查询
以下是能满足需求的聚合查询语句,记得把your_collection替换成你的实际集合名:
db.your_collection.aggregate([ // 按uniqueKey分组,统计次数并收集目标字段 { $group: { _id: "$uniqueKey", count: { $sum: 1 }, docs: { $push: { cust_name: "$cust_name", uniqueKey: "$uniqueKey" } } } }, // 筛选出出现次数大于1的分组 { $match: { count: { $gt: 1 } } }, // 展开收集的文档数组,让每个条目单独显示 { $unwind: "$docs" }, // 只保留需要的字段,调整输出结构 { $project: { _id: 0, cust_name: "$docs.cust_name", uniqueKey: "$docs.uniqueKey" } } ])
各阶段作用说明:
$group:以uniqueKey为分组依据,统计每个key的出现次数,同时用$push把分组内的cust_name和uniqueKey收集到数组中。$match:过滤掉出现次数≤1的分组,只保留重复的uniqueKey分组。$unwind:将之前收集的文档数组拆分成单独的条目,还原成类似原始文档的结构。$project:清理输出结果,只保留需要的两个字段,去掉分组产生的冗余字段。
如果你的样本数据中uniqueKey为100和800的文档重复,执行这个查询后会返回所有这些重复文档的cust_name和uniqueKey字段。
如果集合里存在缺失uniqueKey的文档,可在聚合最前面加一个过滤阶段优化性能:
{ $match: { uniqueKey: { $exists: true } } }
内容的提问来源于stack exchange,提问作者sabu
相关产品推荐
相关产品推荐

