'MongoDB - Sum aggregation with conditionals

I am working on aggregation to perform some analytics on an Orders object, I want to get the total price from every order from the previous month, and the total from this month, I tried passing in the $match parameter, with the appropriate time conditionals but it's not aggregating any of the data. even though if I perform a countDocuments query with the same time conditionals I get a number of documents returned.

const totalThis = await Order.aggregate([
  {
    $match: {
      // should cut the amount of orders off at the beginning of the current month
      createdAt: { $gte: thisMonth.getMonth() + 1 },
    },
  },
  {
    $group: {
      // using $group, _id has to be there or it doesnt
      // return anything, though we dont need an _id
      _id: null,
      total: {
        $sum: "$totalPrice",
      },
    },
  },
]);
res.status(200).json({
  lastMonth: lastMonthSales,
  thisMonth: thisMonthSales,
  totalSalesLast: totalLast,
  totalSalesThis: totalThis,
});

In my Postman request, lastMonth returns 0, so it would make sense that the array returned to totalSalesLast would be empty, however thisMonth returns 5 documents, so it should work. Obviously, if I remove the $match conditional it will aggregate all the documents, but that's because it's doing ALL the documents and not actually filtering.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source