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

使用Mongoose筛选昨日数据异常:今日数据被纳入求和结果求助

解决Mongoose聚合查询前一天记录包含今日数据的问题

你的问题出在日期范围的时间部分没有重置:当前代码里的yesterday只是把日期减了1天,但保留了当前的时分秒(比如现在是今天14:30,yesterday就是昨天14:30),所以$gte: yesterday, $lt: new Date()的范围是「昨天14:30到今天14:30」,自然会包含今天0点到14:30的记录。

要准确获取前一天的完整数据,需要把日期范围限定在昨天00:00:00 到 今天00:00:00,具体修正如下:

// 获取昨天的起始时间(00:00:00)
const startOfYesterday = new Date();
startOfYesterday.setDate(startOfYesterday.getDate() - 1);
startOfYesterday.setHours(0, 0, 0, 0);

// 获取今天的起始时间(00:00:00),作为范围的结束边界
const startOfToday = new Date();
startOfToday.setHours(0, 0, 0, 0);

const sums = salesSchema.aggregate([
    {
      $match: {
        createdAt: {
          $gte: startOfYesterday,
          $lt: startOfToday
        }
      }
    },
    {
      $group: {
        _id: null,
        total: { $sum: { $multiply: ["$price", "$quantity"] } } 
      }
    }
  ]);

补充说明

  • setHours(0, 0, 0, 0)会把日期对象的时、分、秒、毫秒全部重置为0,确保起始和结束时间都是当天的零点。
  • 使用$lt: startOfToday而不是new Date(),能彻底避免把今天已经产生的记录包含进来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:54:56