猫鼬使用聚合按数组内的日期对文档进行分组
Mongoose use aggregate to group documents by dates inside array
我正在尝试了解猫鼬中的 .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 }
}
}
])
}
但是这不起作用。我相信这只有在点击不是数组而只是一个日期的情况下才有效。
感谢您的帮助!
$unwind
解构clicks
数组
$toDate
clicks
从字符串类型到日期类型
await Event.aggregate([
{ $unwind: "$clicks" },
{
$group: {
_id: {
$dateToString: {
format: "%d-%m-%Y",
date: { $toDate: "$clicks" }
}
},
totalClicks: { $sum: 1 }
}
}
])
我正在尝试了解猫鼬中的 .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 }
}
}
])
}
但是这不起作用。我相信这只有在点击不是数组而只是一个日期的情况下才有效。
感谢您的帮助!
$unwind
解构clicks
数组$toDate
clicks
从字符串类型到日期类型
await Event.aggregate([
{ $unwind: "$clicks" },
{
$group: {
_id: {
$dateToString: {
format: "%d-%m-%Y",
date: { $toDate: "$clicks" }
}
},
totalClicks: { $sum: 1 }
}
}
])