猫鼬使用聚合按数组内的日期对文档进行分组

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 }
    }
  }
])

Playground