mongodb - 使用 Mongo Aggregate 计算星期几的频率
问题描述
我正在尝试使用 Mongo Aggregate 函数来计算站点访问的频率,即。在给定的一周内,用户访问该网站有多少天?
{ "_id" : ObjectId("5f7720caf2b93af8d566bc7c"), "email" : "blah@gmail.com", "timestamp" : ISODate("2020-09-29T17:59:00Z") }
{ "_id" : ObjectId("5f7720dcf2b93af8d566ffb7"), "email" : "blah@gmail.com", "timestamp" : ISODate("2020-09-30T01:01:00Z") }
{ "_id" : ObjectId("5f7721bbf2b93af8d56aadc4"), "email" : "yack@gmail.com", "timestamp" : ISODate("2020-10-01T09:58:00Z") }
{ "_id" : ObjectId("5f771e9ff2b93af8d55c57a9"), "email" : "yack@gmail.com", "timestamp" : ISODate("2020-09-26T04:12:00Z") }
{ "_id" : ObjectId("5f771e9ff2b93af8d55c5f6b"), "email" : "yack@gmail.com", "timestamp" : ISODate("2020-09-26T04:22:00Z") }
{ "_id" : ObjectId("5f771eeaf2b93af8d55dc45c"), "email" : "yack@gmail.com", "timestamp" : ISODate("2020-09-27T04:11:00Z") }
我想要的输出:
[
{ "_id": "blah@gmail.com", "dow" [ 2, 3 ], "visits": 2 }, // Visited Tuesday and Wednesday
{ "_id": "yack@gmail.com", "dow" [ 0, 1, 2, 3, 4, 5 ], "visits": 6 } // Visited Sunday through to Friday
]
我可以将每封电子邮件/道琼斯指数对作为记录,但我不确定从这里去哪里......
[
{
$group: {
_id: { email: "$email", dow: { $dayOfWeek: "$timestamp" } },
}
}
]
输出:
{ "_id" : { "email" : "blah@gmail.com", "dow" : 2 } }
{ "_id" : { "email" : "blah@gmail.com", "dow" : 3 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 0 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 1 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 2 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 3 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 4 } }
{ "_id" : { "email" : "yack@gmail.com", "dow" : 5 } }
谢谢!
解决方案
您可以使用另一种$group
说法:
db.collection.aggregate([
{
$group: {
_id: { email: "$email", dow: { $dayOfWeek: "$timestamp" } }
}
},
{
$group: {
_id: "$_id.email",
dow: { $push: "$_id.dow" },
visits: { $sum: 1 }
}
}
])
推荐阅读
- groovy - 防止 GroovyDefaultMethods join() 遮蔽 Java 类的 join() 方法?
- vba - 将多个 CSV 文件导入 1 个表 - 第一行不匹配
- sql - Oracle - 即时加入内联表或表
- c - 是否可以挂载远程文件系统并打开/mmap /dev/mem?
- python - 忽略 Python 异常并在子模块代码中直接继续
- jsf - 无法将 JSF 托管 Bean 与呈现的视图绑定
- javascript - 代码显示预期的输出,但被标记为错误。我错过了什么吗?
- firebase - 从 Firebase Admin SDK 导入 json 文件
- ubuntu - 将数据集从我的 PC 上传到 Google Cloud Platform 上的虚拟机实例的最佳方式
- debugging - MSVC 在调试期间找不到符号