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

MongoDB如何无需硬编码匹配集合中最近2年的记录?

无需硬编码获取MongoDB集合最近2年记录的方案

要实现基于集合内最新记录年份筛选最近2年的数据,不用硬编码日期,可以通过两种方式实现:

方式一:纯聚合管道一次性完成

全程用MongoDB聚合操作,先找出集合里的最新记录日期,再计算2年前的日期,最后筛选符合范围的记录:

db.yourCollection.aggregate([
  // 1. 获取集合中最新的fechaOrden日期
  {
    $group: {
      _id: null,
      maxFecha: { $max: "$fechaOrden" }
    }
  },
  // 2. 计算最新日期往前推2年的起始日期(MongoDB 5.0+支持$dateSubtract)
  {
    $addFields: {
      minFecha: {
        $dateSubtract: {
          startDate: "$maxFecha",
          unit: "year",
          amount: 2
        }
      }
    }
  },
  // 3. 关联原集合,筛选出日期在[minFecha, maxFecha]之间的记录
  {
    $lookup: {
      from: "yourCollection",
      let: { minF: "$minFecha", maxF: "$maxFecha" },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [
                { $gte: ["$fechaOrden", "$$minF"] },
                { $lte: ["$fechaOrden", "$$maxF"] }
              ]
            }
          }
        }
      ],
      as: "recentTwoYearsRecords"
    }
  },
  // 可选:将结果展开为单条记录格式(按需调整)
  { $unwind: "$recentTwoYearsRecords" },
  { $replaceRoot: { newRoot: "$recentTwoYearsRecords" } }
])

如果你的MongoDB版本低于5.0,用$subtract计算近似的2年前日期(注意:会忽略闰年,精度略有误差):

// 替换上面$addFields里的minFecha字段
minFecha: {
  $subtract: ["$maxFecha", 2 * 365 * 24 * 60 * 60 * 1000]
}

方式二:分两步获取日期范围再聚合

这种方式更直观,适合新手理解:先单独查询出最新记录的日期,计算出2年前的日期,再带入聚合管道做筛选:

// 第一步:获取集合中最新的fechaOrden日期
const maxFecha = db.yourCollection.findOne({}, { fechaOrden: 1, _id: 0 }, { sort: { fechaOrden: -1 } }).fechaOrden;

// 第二步:计算2年前的日期
const minFecha = new Date(maxFecha);
minFecha.setFullYear(maxFecha.getFullYear() - 2);

// 第三步:用计算好的日期范围做聚合筛选
db.yourCollection.aggregate([
  {
    $match: {
      fechaOrden: {
        $gte: minFecha,
        $lte: maxFecha
      }
    }
  },
  // 这里可以添加你的后续聚合阶段...
])

两种方式都能避免硬编码日期,自动适配集合内的最新记录年份。比如集合最新记录是2021年,会自动筛选2019-2021年的数据。

内容的提问来源于stack exchange,提问作者lemon-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:32:59