【问题标题】:How do you count records for the current month?您如何计算当月的记录?
【发布时间】:2021-03-22 02:38:59
【问题描述】:

使用 mongo 或 mongoose,如何获取当月的记录总数?

我有这个,但它给了我每个月的总数,我只想计算当月的记录数。

  const genTotal = await General.aggregate([
    {
      $group: {
        _id: {
          year: { $year: "$visitDate" },
          month: { $month: "$visitDate" },
        },
        Total: { $sum: 1 },
      },
    },
  ]);

我也试过这个:

  const genTotal = await General.aggregate([
    {
      $group: {
        _id: {
          month: { $month: "$visitDate" },
        },
        Total: { $sum: 1 },
      },
    },
    {
      $match: { $month: 3 },
    },
  ]);

【问题讨论】:

  • 检查更新的答案

标签: node.js mongodb mongoose


【解决方案1】:

在开头添加一个匹配阶段以过滤掉过去一个月的文档试试这个:

let month = new Date().getMonth();

const genTotal = await General.aggregate([
    {
        $match: {
            $expr: {
                $eq: [{ $month: "$visitDate" }, month]
            }
        }
    },
    {
        $group: {
            _id: {
                year: { $year: "$visitDate" },
                month: { $month: "$visitDate" },
            },
            Total: { $sum: 1 }
        }
    }
]);

【讨论】:

  • 这看起来很有希望,谢谢!但由于某种奇怪的原因,它显示月份为二月或更确切地说是“2”?
  • 因为在 JavaScript 中月份从 0 开始。所以 2 是三月。所以 JavaScript 中的月份介于 0-11 之间。
  • 啊啊啊,我明白了。有点混乱但没关系
  • 最后一件事,有没有办法从查询中提取月份名称,因为“2”不是很有帮助,特别是如果它不代表二月
  • 别无选择,只能放开关盒或类似的东西:stackoverflow.com/questions/49870419/…
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多