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

MongoDB聚合查询:移除itemId唯一的文档

在MongoDB聚合中筛选保留itemId重复的文档

要实现移除itemId唯一的文档、只保留itemId重复的记录,你可以在原聚合查询基础上添加几个阶段,通过分组统计+过滤+展开的方式完成,具体方案如下:

完整聚合查询

db.contents.aggregate([
  // 原有的筛选条件,保持不变
  {
    $match: {
      $or: [
        {
          $and: [
            { widgetId: new ObjectId("648d461dae1b9fb2af57fbb2") },
            { value: 'Yes' }
          ]
        },
        {
          $and: [
            { widgetId: new ObjectId("648d4111ae1b9fb2af57f8f9") },
            { value: "20" }
          ]
        }
      ]
    }
  },
  // 按itemId分组,统计每个itemId的文档数量,同时保存组内所有原始文档
  {
    $group: {
      _id: "$itemId",
      count: { $sum: 1 },
      docs: { $push: "$$ROOT" }
    }
  },
  // 只保留文档数大于1的分组(即itemId重复的记录)
  {
    $match: { count: { $gt: 1 } }
  },
  // 把组内的文档数组拆分成单个文档
  { $unwind: "$docs" },
  // 将拆分后的文档恢复为根文档结构,和原查询输出格式一致
  { $replaceRoot: { newRoot: "$docs" } }
])

各阶段作用说明

  • $group:以itemId为分组键,用$sum统计每个分组的文档数量,$push把分组内的原始文档存入数组docs中。
  • $match:过滤掉统计数量为1的分组,只保留itemId重复的分组。
  • $unwind:将分组内的docs数组拆分成独立的文档,还原成接近原始数据的结构。
  • $replaceRoot:把docs中的内容提升为根文档,让最终输出的文档结构和原查询结果完全一致。

执行该查询后,就能得到你期望的仅包含itemId重复的文档集合。

内容的提问来源于stack exchange,提问作者user3384985

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:27:02