mongoose 只获取昨天发生的记录

nhjlsmyf  于 2023-04-21  发布在  Go
关注(0)|答案(1)|浏览(110)

我试图只得到记录,发生在前一天使用 Mongoose .我有下面的查询.但今天的记录也包括在总和值.我将感谢任何意见,以实现这一点.

const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1)

const sums = salesSchema.aggregate([
    {
      $match: {
        createdAt: {
          $gte: yesterday,
          $lt: new Date()
        } // expected this should filter only createdAT previous day
      }
    },
    {
      $group: {
        _id: null,
        total: { $sum: { $multiply: ["$price", "$quantity"] } } 
      }
    }
  ]);
ocebsuys

ocebsuys1#

你在$match中使用当前日期作为上限,所以它包含了当前日期之前的所有记录。
相反,您可以使用两个不同的日期:

const yesterdayStart = new Date();
yesterdayStart.setDate(yesterdayStart.getDate() - 1);
yesterdayStart.setHours(0, 0, 0, 0); // Set to the start of yesterday

const yesterdayEnd = new Date();
yesterdayEnd.setDate(yesterdayEnd.getDate() - 1);
yesterdayEnd.setHours(23, 59, 59, 999); // Set to the end of yesterday

const sums = salesSchema.aggregate([
  {
    $match: {
      createdAt: {
        $gte: yesterdayStart,
        $lte: yesterdayEnd // Only include records up to the end of yesterday
      }
    }
  },
  {
    $group: {
      _id: null,
      total: { $sum: { $multiply: ["$price", "$quantity"] } }
    }
  }
]);

相关问题