首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB聚合管道计算保留量

MongoDB聚合管道计算保留量
EN

Stack Overflow用户
提问于 2016-11-29 08:25:37
回答 1查看 291关注 0票数 1

我有一组用户。所有用户都有一个createdAt和一个lastLogin字段。createdAt字段表示用户注册时的日期,而lastLogin字段是用户最后一次登录站点的日期。

我想知道有多少用户在2月份注册后至少30天再次登录到该网站。更重要的是,我想知道有多少用户在3月,4月,5月等注册后,至少30天后,他们第一次注册。

我有一个类似的(但不同的)方法,它计算出在过去30天内每个月有多少人登录( fromDate是30天前的):

代码语言:javascript
复制
const pipeline = [
    {
        $match: {
            lastLogin: {
                $gt: fromDate,
                $exists: true
            },
        },
    }, 
    {
        $group: {
            _id: {
                year : { $year : "$createdAt" },
                month : { $month : "$createdAt" },
            },
            sum: { $sum: 1 }
        }
    }
];

但我不知道该怎么做才能做我想做的事。

我想要做的是统计一下在3月1日之后的任何时间点,有多少人注册了2月1日。第二个问题是统计2月份注册的人数在过去30天中注册的人数。因此,如果今天是10月1日,那么从9月1日到10月1日签署的每个人都会被计算在内。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 11:55:50

尝试使用map-还原查询,我认为这是您需要的:

代码语言:javascript
复制
// Al 3 users were createdAt februrary 2016
db.collection.save([
    {createdAt: new Date(2016, 1, 2), lastLogin: new Date(2016, 2, 5)},
    {createdAt: new Date(2016, 1, 3), lastLogin: new Date(2016, 2, 7)},
    {createdAt: new Date(2016, 1, 2), lastLogin: new Date(2016, 1, 15)},
])


map = function() { 
    var days30after = new Date(this['createdAt']);
    days30after.setDate(this['createdAt'].getDate()+30);

    if(this['lastLogin'] >= days30after){

        // Group results based on year and month values, add 1 to month
        var key = {'year':this['createdAt'].getUTCFullYear(), 'month':this['createdAt'].getUTCMonth()+1};
        emit(key, 1);   
    }
}

reduce = function(key, values) {
    return values.length;
} 

db.collection.mapReduce(map,reduce, { out : "collection2" });

db.collection2.find().pretty()

结果:2名用户在2月份注册,30天后再次登录。

代码语言:javascript
复制
{ "_id" : { "year" : 2016, "month" : 2 }, "value" : 2 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40860969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档