怎么从mongodb中按照日期导出用户数据

来源:互联网 发布:驱蚊软件下载 编辑:程序博客网 时间:2024/06/05 04:57

之所以写这篇文章,是因为之前工作中遇到一个问题,现在把相关场景简单描述一下:

我们是一个客户端APP软件,具有注册和完善用户资料功能,每次有新用户注册时我们会保存这个新用户,一段时间过后,运营人员需要统计每天都有多少人注册了,又有多少人填写了用户资料信息等等,这时候就需要我们从后台数据库进行查询了。

其实,刚开始想到的是写个命令,到现网库上执行一下就行了(之前需要统计的天数比较少,第一次统计的时候也就只需要统计几天的数据),但是后来发现运营人员需要统计几个月的数据,这时候如果还按照一条命令一条命令的方式手动执行明显效率太低。因此想了个办法,简单编写了一个脚本。

(备注:这里需要的数据,是按照天为维度进行统计的,每天需要统计多个数据,并且将这些数据以报表的形式导出)

下面是statistics.js脚本内容:

conn = new Mongo("192.168.1.200:27017");//填写现网mongodb的服务器地址mongo 192.168.1.200:27017/test -u user -p password ****.jsdb =conn.getDB("account");for(var i=0;i<4;i++){for(var j=1;j<31;j++){var start = new Date(2017,i,j);var end = new Date(2017,i,j+1);var currentdatecount = db.AccountInfo.count({"ct":{"$gte":start,"$lt":end}});var currentdatevoicecount = db.AccountInfo.count({"voice":"1","vct":{"$gte":start,"$lt":end}});var currentdateinfocount = db.AccountInfo.count({"firstinfots":{$ne:null},"ct":{"$gte":start,"$lt":end}});db.accountinfostatistic.insert({"currentdate":start,"currentdatecount":currentdatecount,"currentdatevoicecount":currentdatevoicecount,"currentdateinfocount":currentdateinfocount})if((i==0&&j==30)||(i==1&&j==27)||(i==2&&j==30)||(i==3&&j==29)){var start = new Date(2017,i,j+1);var end = new Date(2017,i+1,1);var currentdatecount = db.AccountInfo.count({"ct":{"$gte":start,"$lt":end}});var currentdatevoicecount = db.AccountInfo.count({"voice":"1","vct":{"$gte":start,"$lt":end}});var currentdateinfocount = db.AccountInfo.count({"firstinfots":{$ne:null},"ct":{"$gte":start,"$lt":end}});db.accountinfostatistic.insert({"currentdate":start,"currentdatecount":currentdatecount,"currentdatevoicecount":currentdatevoicecount,"currentdateinfocount":currentdateinfocount})break;}}}

上面的脚本统计了2017年1月1日到4月30日的统计数据,从实现上看,我先把需要统计的数据通过命令依次查询出来,然后将这些数据和当前日期进行绑定,作为一条记录保存到一个临时集合accountinfostatistic中,如下所示:


紧接着,我们需要做的就是将accountinfostatistic集合里面的数据导出,按照我们平时工作的需要,一般报表都是以excel形式提供,这时候我们就可以将accountinfostatistic集合数据导出成csv格式,然后使用excel打开即可。具体导出数据的命令如下

mongoexport --host *** --port *** -d account -c accountinfostatistic --csv -f currentdate,currentdatecount,currentdatevoicecount,currentdateinfocount -o /data/accountinfostatistic.csv
于是我们就可以得到下面的统计报表数据:


至此,一份完整的统计需要处理便完成了。





0 0
原创粉丝点击