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

MongoDB 4.4+如何查询同一部门下同邮箱对应多userID的异常记录

MongoDB 同部门同邮箱多userID异常记录查询方案

适用版本

MongoDB 4.4 及以上版本

核心思路

先按 部门(dept) + 邮箱(email) 分组,统计每组内去重后的 userID 数量,筛选出数量大于1的违规分组,再关联拉取该分组下所有原始记录即可。

完整查询语句

将语句中的 yourCollectionName 替换为你实际的集合名即可执行:

db.yourCollectionName.aggregate([
  // 步骤1:按部门+邮箱分组,收集去重userID、对应所有原始记录
  {
    $group: {
      _id: {
        dept: "$dept",
        email: "$email"
      },
      distinctUserIds: { $addToSet: "$userID" },
      records: { $push: "$$ROOT" }
    }
  },
  // 步骤2:筛选出同部门同邮箱对应多个不同userID的违规分组
  {
    $match: {
      $expr: { $gt: [ { $size: "$distinctUserIds" }, 1 ] }
    }
  },
  // 步骤3:展开所有违规记录,可直接拿到单条异常数据
  { $unwind: "$records" },
  // 步骤4:格式化输出,直接返回原始异常文档结构
  { $replaceRoot: { newRoot: "$records" } }
])

结果说明

针对你给出的样例数据,该语句会返回 dept:A、email:bob@example.com 下的3条全部记录,正好命中你标注的异常场景。
如果你只需要查看哪些部门+邮箱组合违规,不需要返回所有原始异常记录,删除最后两步的$unwind和$replaceRoot即可,输出结果会直接展示违规的部门、邮箱、对应的多个不同userID列表。

额外建议

清理完现有异常数据后,你可以在业务逻辑层增加同部门同邮箱提交前校验userID唯一性的逻辑,避免后续再产生违规数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:15:02