Mongodb 使用Mongo Aggregate计算星期日频率

Mongodb 使用Mongo Aggregate计算星期日频率,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我试图使用Mongo聚合函数计算站点访问的频率,即在给定的一周内,用户访问站点的天数是多少 { "_id" : ObjectId("5f7720caf2b93af8d566bc7c"), "email" : "blah@gmail.com", "timestamp" : ISODate("2020-09-29T17:59:00Z") } { "_id" :

我试图使用Mongo聚合函数计算站点访问的频率,即在给定的一周内,用户访问站点的天数是多少

{ "_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 }
        }
    }
])