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

MongoDB聚合查询:获取每个唯一ID的最新提交记录

MongoDB聚合实现按条件筛选+取每组最新记录

直接给你梳理清楚正确的聚合流程,步骤和代码如下:

  1. 先过滤数据:用$match把符合x=y的记录筛选出来,先做过滤能减少后续排序、分组的处理量,提升性能。
  2. 按创建日期倒序排序:把最新的提交记录排在每组最前面,这里用你实际的创建日期字段(比如createdAt),别依赖_id的隐含时间戳,显式字段语义更清晰、维护更省心。
  3. 分组提取最新记录:按你要去重的唯一业务标识(比如用户ID、实体ID这类,自己替换成实际字段名)分组,用$first获取每组的第一条记录——也就是排序后最靠前的最新提交。
  4. 可选:还原文档结构:把分组后嵌套的记录提升为根文档,和原提交记录结构一致,方便后续业务处理。

完整代码示例:

Submission.aggregate([
  // 第一步:筛选符合条件的提交记录
  { $match: { x: y } },
  // 第二步:按创建日期降序排序,最新记录在前
  { $sort: { createdAt: -1 } },
  // 第三步:按业务唯一字段分组,保留每组最新的完整记录
  {
    $group: {
      _id: "$businessId", // 替换成你的实际去重字段,比如submitterId、entityId
      latestSubmission: { $first: "$$ROOT" }
    }
  },
  // 可选:将最新记录转为根文档,结构与原数据一致
  {
    $replaceRoot: { newRoot: "$latestSubmission" }
  }
])

关键注意点:

  • 必须先执行$match再做$sort,否则会对全集合数据排序,浪费资源
  • $sort一定要在$group之前执行,否则$first无法拿到每组的最新记录
  • 如果没有单独的创建日期字段,也可以用$sort: { _id: -1 }(ObjectId自带时间戳),但还是建议添加显式的创建时间字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:10:14