首页 > 解决方案 > 如何找到在 7 天内访问我的网站超过 3 天的用户?

问题描述

我想在 7 天、15 天和 30 天中找到所有访问我的页面超过 3 天的用户

我找到访问我网站的用户总数,并根据用户进行计数,但它与我的结果不符

我的收藏就像

{
    "_id" : ObjectId("5cf110a80556ac496396d07c"),
    "user" : "sachin",
    "event" : "page-navigation",
    "data" : {
        "url" : "/"
    },
    "addedAt" : ISODate("2019-05-14T11:31:52.755Z"),
    "__v" : 0
}

{
    "_id" : ObjectId("5cf110a80556ac496396d07c"),
    "user" : "sachin",
    "event" : "page-navigation",
    "data" : {
        "url" : "/"
    },
    "addedAt" : ISODate("2019-05-15T11:31:52.755Z"),
    "__v" : 0
}

{
    "_id" : ObjectId("5cf110a80556ac496396d07c"),
    "user" : "sachin",
    "event" : "page-navigation",
    "data" : {
        "url" : "/"
    },
    "addedAt" : ISODate("2019-05-16T11:31:52.755Z"),
    "__v" : 0
}

等等...考虑最多 45 天

请忽略 _id 和上面的示例数据,Sachin 在 1 周内访问了我的网站 3 天,并且在 7 天内有 3 天访问量如此之多

db.getCollection('usertracks').aggregate([ 
    {$project: {
            yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$addedAt", timezone: "+05:30" } }
    }},
    {
        $group:
        {
            _id: {
                addedAt: "$yearMonthDay",
                user: "$user"
        },
            users: { $sum: 1 }
        }
    },
])

如果任何用户在 7 天内访问我的网站超过 3 天,则应返回该用户详细信息。帮助我找到解决方案。

谢谢你的帮助!

输出:

{
  "user":"Sachin"
}

标签: node.jsmongodb

解决方案


const getUserCategoryDetails = async function(){

const activeUsers = await UserTrack.aggregate([ 
    {
        $project: {
            yearMonthDay: { $dateToString: { format:  "%Y/%m/%d", date: "$addedAt", timezone: "+05:30" } },
            user:"$user"
        }
    },
    {
        $group:
        {
            _id:"$user",
            "visitedDate": {$addToSet:{date:"$yearMonthDay"}}
        } 
    }, 
    {$unwind: "$visitedDate"},
    {$sort: {"visitedDate":1}},
    {$group: 
        {
            _id: "$_id", 
            visitDate: {$push: "$visitedDate"}
        }
    }

]);

这是根据用户查找所有日期的代码


推荐阅读