mongodb 数据统计(留存率) 应该怎么实现?

在玩家的登陆日志里记录了, 玩家账号, 登陆时间, 注册时间.(当然还有别的秒级时间和玩家信息.)

数据大概是这样的:

{"_id":xxxx,"userName":"zhangsan","loginTime":2015年1月1日,"createTime":2015年1月1日......}
{"_id":xxxx,"userName":"lisiaaaa","loginTime":2015年1月2日,"createTime":2015年1月2日......}
{"_id":xxxx,"userName":"zhangsan","loginTime":2015年1月2日,"createTime":2015年1月1日......}
{"_id":xxxx,"userName":"lisiaaaa","loginTime":2015年1月3日,"createTime":2015年1月2日......}
{"_id":xxxx,"userName":"lisiaaaa","loginTime":2015年1月4日,"createTime":2015年1月2日......}
{"_id":xxxx,"userName":"zhangsan","loginTime":2015年1月4日,"createTime":2015年1月1日......}
{"_id":xxxx,"userName":"zhangsan","loginTime":2015年1月5日,"createTime":2015年1月2日......}

想统计玩家的留存率.是根据某一天玩家的注册量来作为起始点.

比如 1日 新注册了1000个玩家, 第二日这1000个玩家有900个登陆了, 第三日这1000个玩家只登陆了500个... 希望看到的数据是这样的

{"id":2015年1月1日,"data":[{day:2015年1月1日, count:1000},{day:2015年1月2日, online:9000},{day:2015年1月3日, online:500}]}

这是1日的新注册玩家的留存情况. 每天肯定都会有新玩家注册, 我们关注的留存就是当天新注册玩家在以后每天的登陆情况, 所以最终呈现的应该是这个样子..

比如截止到 2015年1月5日 的留存统计结果:

{"id":2015年1月1日,"data":[{day:2015年1月1日, count:1000},{day:2015年1月2日, online:900},{day:2015年1月3日, online:500},{day:2015年1月4日, count:400},{day:2015年1月5日, online:500}]}
{"id":2015年1月2日,"data":[{day:2015年1月2日, count:1200},{day:2015年1月3日, online:900},{day:2015年1月4日, count:600},{day:2015年1月5日, online:300}]}
{"id":2015年1月3日,"data":[{day:2015年1月3日, count:2000},{day:2015年1月4日, count:700},{day:2015年1月5日, online:500}]}
{"id":2015年1月4日,"data":[{day:2015年1月4日, count:500},{day:2015年1月5日, online:200}]}
{"id":2015年1月5日,"data":[{day:2015年1月5日, count:4000}]}

不知道该怎么实现.. 在此求助各位. 跪谢...

阅读 6.4k
2 个回答

这样设计:

{
    player: {
        id: 123,
        name: 'zhangsan',
        register_time: 
    },
    login_time: 
}

然后aggregate
先按register_time筛选,再按login_time分组

估计你还是不会……

另外,我觉得,不要这么做,计算量大

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题