如何查询MongoDB中streetModel下drives数组存在重复_id的文档ID
原有查询的核心错误
- 错误对
streetModel字段执行$unwind:该字段是嵌套对象而非数组,无需拆分 $unwind目标路径错误:需要拆分的是streetModel下的drives数组,正确路径应为$streetModel.drives- 分组逻辑错误:仅按文档自身
_id分组无法统计drives数组内重复的_id,需要同时按文档_id和drive._id分组才能判断重复
正确聚合查询
以下查询可直接返回所有存在drives._id重复的文档ID:
db.streets.aggregate([ // 拆分drives数组为独立文档 { $unwind: "$streetModel.drives" }, // 按【文档ID + drive的_id】分组,统计每个drive_id在当前文档内的出现次数 { $group: { _id: { docId: "$_id", driveId: "$streetModel.drives._id" }, count: { $sum: 1 } } }, // 过滤出出现次数大于1的组,即存在重复drive_id的文档 { $match: { count: { $gt: 1 } } }, // 按文档ID去重,避免同一个文档有多个重复drive_id时重复输出 { $group: { _id: "$_id.docId" } } ])
如果需要同时输出文档对应的重复drive_id列表,可以调整最后一步的分组逻辑:
db.streets.aggregate([ { $unwind: "$streetModel.drives" }, { $group: { _id: { docId: "$_id", driveId: "$streetModel.drives._id" }, count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } }, { $group: { _id: "$_id.docId", duplicateDriveIds: { $push: "$_id.driveId" } } } ])
内容的提问来源于stack exchange,提问作者AdamK
相关产品推荐
相关产品推荐

