如何使用mongoDB中的createdAt字段统计特定月份或年份内创建的文档?

问题描述 投票:0回答:1

我正在构建一个管理仪表板,我想计算给定月份或年份创建的用户数量。我正在使用带有查询参数“createdAt”的 countDocuments() 方法,但结果为 0,我期望结果为 2。

这是代码:

const currentMonth = new Date().getMonth();
const currentYear = new Date().getFullYear();

const newClientThisMonth = await User.countDocuments({
    createdAt: { $eq: currentYear },
});

“newClientThisYear”变量返回 0 而不是 2。我知道我在该字段中以错误的方式使用 countDocuments() 方法,但对于“角色”字段等其他字段,一切正常。

const clientUsersCount = await User.countDocuments({ role: "user" });

那么,如果是你,你会怎么做?

javascript mongodb mongoose ecmascript-6
1个回答
0
投票

在我看来,您当前的代码是将日期与简单的年/月进行比较,例如 2024 年或 10。我认为它不会返回任何数据。

在 MongoDB 中执行此操作的规范方法之一是使用

$year
$month
运算符将年份和月份一起比较(并且仅比较年份和月份)。

db.collection.aggregate([
  {
    "$match": {
      "$expr": {
        "$let": {
          "vars": {
            // your input here
            "yearInput": 2024,
            "monthInput": 10
          },
          "in": {
            "$and": [
              {
                "$eq": [
                  "$$yearInput",
                  {
                    "$year": "$createdAt"
                  }
                ]
              },
              {
                "$eq": [
                  "$$monthInput",
                  {
                    "$month": "$createdAt"
                  }
                ]
              }
            ]
          }
        }
      }
    }
  },
  {
    "$count": "count"
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.