You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:03