我正在构建一个管理仪表板,我想计算给定月份或年份创建的用户数量。我正在使用带有查询参数“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" });
那么,如果是你,你会怎么做?
在我看来,您当前的代码是将日期与简单的年/月进行比较,例如 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"
}
])