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

如何用MongoDB聚合查询账本数据中各primary_key的最新文档

MongoDB聚合查询获取每个primary_key的最新数据

针对你的追加式账本集合,要高效获取每个primary_key对应的最新数据(基于updated_at),可以使用以下两种聚合管道方案,均无需逐个查询主键,适合百万级数据量:

方案一:分组取最大时间后筛选对应文档

db.collection.aggregate([
  // 按primary_key分组,计算每个组的最新updated_at并保留组内所有文档
  {
    $group: {
      _id: "$primary_key",
      maxUpdatedAt: { $max: "$updated_at" },
      allDocs: { $push: "$$ROOT" }
    }
  },
  // 从组内文档中筛选出updated_at等于最新时间的文档,设为根文档输出
  {
    $replaceRoot: {
      newRoot: {
        $arrayElemAt: [
          {
            $filter: {
              input: "$allDocs",
              cond: { $eq: ["$$this.updated_at", "$maxUpdatedAt"] }
            }
          },
          0
        ]
      }
    }
  }
])

方案二:先排序再分组取首条(性能更优)

db.collection.aggregate([
  // 全局按updated_at降序排序,确保每个primary_key的最新数据排在最前
  { $sort: { updated_at: -1 } },
  // 按primary_key分组,直接取组内第一个文档(即最新数据)
  {
    $group: {
      _id: "$primary_key",
      latestDocument: { $first: "$$ROOT" }
    }
  },
  // 将最新文档设为根文档输出
  { $replaceRoot: { newRoot: "$latestDocument" } }
])

性能优化建议

为适配百万级数据量,建议创建复合索引加速聚合操作:

db.collection.createIndex({ primary_key: 1, updated_at: -1 })

该索引可直接支撑排序和分组阶段的查询逻辑,大幅降低资源消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:55:24