MongoDB如何查询单字段值重复的所有原始文档
查询所有title字段值重复的文档
你的文档为MongoDB标准文档结构,可通过以下方法实现需求,不需要提前指定固定重复title值,最终返回所有存在重复title的完整原始文档,不会做分组聚合输出:
方法1:分两步查询(性能更优,适合大数据量集合)
- 先通过聚合拿到所有出现次数≥2的title值列表
// 执行后得到所有重复的title组成的数组 const duplicateTitleList = db.你的集合名.aggregate([ { $group: { _id: "$title", count: { $sum: 1 } } }, { $match: { count: { $gte: 2 } } }, { $replaceRoot: { newRoot: "$_id" } } ]).toArray() - 用
$in操作符匹配所有对应文档// 直接返回所有title重复的完整原始文档 db.你的集合名.find({ title: { $in: duplicateTitleList } })
方法2:单聚合管道一步输出(不需要中间变量)
如果不想拆分查询步骤,可以直接用以下聚合语句直接得到结果,返回结构和find查询一致:
db.你的集合名.aggregate([ // 按title分组,统计数量同时暂存所有同组文档 { $group: { _id: "$title", count: { $sum: 1 }, matchedDocs: { $push: "$$ROOT" } } }, // 过滤掉仅出现1次的非重复title { $match: { count: { $gte: 2 } } }, // 拆解暂存的文档数组,还原为单条文档结构 { $unwind: "$matchedDocs" }, // 替换根节点,输出原始文档格式 { $replaceRoot: { newRoot: "$matchedDocs" } } ])
注意:如果你的集合数据量较大,优先用方法1,同时建议给
title字段加索引,能大幅提升查询速度。
内容的提问来源于stack exchange,提问作者Aisling
相关产品推荐
相关产品推荐

