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

MongoDB查询:如何筛选endDate加3天后早于今日的文档

MongoDB查询:筛选endDate加3天后早于今日的文档

你需要筛选出endDate字段加3天后仍早于今日的文档,与其在查询中对每个文档的endDate做计算,更高效的方式是反向计算时间阈值——把当前时间减去3天,然后查询endDate小于这个阈值的文档,这样能利用endDate字段的索引,大幅提升查询性能。

修改后的代码如下:

const myCollection = DB_CONNECTION.collection(TRANSACTION);
// 计算当前时间减去3天的日期对象
const threeDaysAgo = new Date();
threeDaysAgo.setDate(threeDaysAgo.getDate() - 3);

let expiredTrans = await myCollection.find({ "endDate": { $lt: threeDaysAgo }}).toArray();

如果确实需要在MongoDB查询内部做日期计算(不推荐,因为无法利用索引,数据量大时性能会很差),可以用聚合查询实现:

const myCollection = DB_CONNECTION.collection(TRANSACTION);

let expiredTrans = await myCollection.aggregate([
  {
    $addFields: {
      // 给每个文档添加endDate加3天的临时字段
      endDatePlus3: { $add: ["$endDate", 3 * 24 * 60 * 60 * 1000] }
    }
  },
  {
    $match: {
      endDatePlus3: { $lt: new Date() }
    }
  }
]).toArray();

优先用第一种反向计算阈值的方案,尤其是数据集较大时,性能优势会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:35:04