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

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

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

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

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

下面是statistics.js脚本内容:

conn = new Mongo("192.168.1.200:27017");//填写现网mongodb的服务器地址mongo 192.168.1.200:27017/test -u user -p password ****.js
db =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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值