我有收藏集users
。
users
集合具有以下数据
{
'_id' : '5ed52b5fc5a55a0d8556288d',
'name' : 'Don',
"createdAt" : ISODate("2020-01-01T00:00:00.000Z"),
},
{
'_id' : '5ed52b5fc5a5230d8556288d',
'name' : 'Fabiano',
"createdAt" : ISODate("2020-02-01T00:00:00.000Z"),
},
{
'_id' : '5ed52b5fc5a55a0d8500288d',
'name' : 'Jose',
"createdAt" : ISODate("2020-02-03T00:00:00.000Z"),
},
{
'_id' : '5ed51b5fc5a52a0d8500288d',
'name' : 'Capablanca',
"createdAt" : ISODate("2020-04-03T00:00:00.000Z"),
}
Isodate
年仅2020
。
我们可以看到,接下来的几个月中将创建用户
'Don' -> 'January','Fabiano' -> 'February','Jose' -> 'February','Capablanca' -> 'April'
mongodb或moongoose查询是否有可能获得与以下类似的结果
[
//key -> month and value -> no of users
{
1 : 1
},
{
2 : 2
},
{
4 : 1
}
]
我正在使用nodejs,与mongodb和mongoose一起表达。
答案 0 :(得分:2)
您需要使用聚合
model.aggregate([
{
$unwind: "$createdAt"
},
{
$group: {
_id: { $month: "$createdAt" },
userCount: { $sum: 1 }
}
},
{
$addFields: { monthNumber: "$_id" }
},
{
$project: { _id: 0 }
},
{
$sort: { monthNumber: 1 }
}
])
您将获得以下输出
[
{
"monthNumber": 1,
"userCount": 1
},
{
"monthNumber": 2,
"userCount": 2
},
{
"monthNumber": 4,
"userCount": 1
}
]
这里是demo