我正在尝试了解 mongoose 中的 .aggregate 函数。我有以下模型,我尝试计算每天发生的点击次数。
var clickEvent = new Schema({
createdAt: {type: Date},
clicks: [{type: Date, _id: false}]
})
所以想象一下我有这样的多个文档:
[{
createdAt: '2020-12-30T11:26:19.948+00:00',
clicks: ['2021-01-27T15:58:37.109+00:00', '2021-01-28T15:58:37.109+00:00', 2021-01-28T15:58:37.109+00:00]
},
{
createdAt: '2020-12-31T11:26:19.948+00:00',
clicks: ['2021-01-24T15:58:37.109+00:00', '2021-01-22T15:58:37.109+00:00', 2021-01-28T15:58:37.109+00:00]
}]
我现在想找回类似的东西
[{day: '24-01-2021', totalClicks: 10}, {day: '25-01-2021', totalClicks: 2}]
我尝试了以下
await Event.aggregate([
{
$group : {
_id :{ $dateToString: { format: "%Y-%m-%d", clicks: "$date"} },
list: { $push: "$$ROOT" },
totalClicks: { $sum: 1 }
}
}
])
}
然而这行不通。我相信这只有在点击次数不是数组而只是一个日期时才有效。
感谢您的帮助!
答案 0 :(得分:1)
$unwind
解构 clicks
数组$toDate
clicks
类型从字符串到日期类型await Event.aggregate([
{ $unwind: "$clicks" },
{
$group: {
_id: {
$dateToString: {
format: "%d-%m-%Y",
date: { $toDate: "$clicks" }
}
},
totalClicks: { $sum: 1 }
}
}
])