如何在Java中对MongoDB按日期进行查询统计
来源:互联网 发布:linux 如何安装xampp 编辑:程序博客网 时间:2024/06/08 14:43
今天需要在MongoDB里做一个统计功能,同时要按日期进行过滤。查了很久都没有找到合适的资料,感觉相关资料太少了。经过苦逼地钻研,终于把问题搞定了。现归纳如下:
MongoDB中的数据示例:
方法一:通过构造BasicDBObject对象来进行查询
int startYear=2015,endYear=2016;int startMonth=12,endMonth=1;int startDay=1,endDay=1;BasicDBObject query= new BasicDBObject("applydate", new BasicDBObject("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).append("$lt", new Date(endYear - 1900, endMonth -1, endDay)));//因为无法确知当前月有多少天,所以就从当月的1号(包含)计到下月1号(不包含)int iCount = cltApplies.find(query).count();System.out.println(iCount);
经测试上述代码执行完毕后iCount为9。也就是在2016-1-1至2016-1-31期间有9条记录。
方法二:通过BasicDBObjectBuilder对象来查询:
int startYear=2016,endYear=2016;int startMonth=1,endMonth=2;int startDay=1,endDay=1;BasicDBObject query= new BasicDBObject();query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());int iCount = cltApplies.find(query).count();System.out.println(iCount);
上述代码执行后iCount同样为9。
注意:因为java.util.Date(year,month,day)这个构造函数中year是超出1900的年数,所以需要减去1900;month从0开始,所以需要减去1。这个问题容易被初学者忽视。
下面扩展地说一下如果要进行带日期过滤条件的统计,该如何做。
前面的东西都相同,只是在统计的时候需要调用集合的distinct方法。如统计某个字段不重复的值有哪些,可用如下写法:
int startYear=2016,endYear=2016;int startMonth=1,endMonth=2;int startDay=1,endDay=1;BasicDBObject query= new BasicDBObject();query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());List<String> lstUserIds = cltApplies.distinct("userId", query);System.out.println(lstUserIds.size());
上面这段代码的执行结果为4。也就是在2016-1-1至2016-1-31之间出现了4个不同的userId。
0 0
- 如何在Java中对MongoDB按日期进行查询统计
- MySql按日期进行统计
- Linq按日期统计查询
- java spring hibernate 按日期查询数据库中 数据
- 按日期对文件进行自动归档
- SQL 对表格进行按日期分组
- 按日期对文件进行自动归档
- java代码中如何对MongoDB数据库进行类似{“age”:{"$all":[6,8]}}的查询
- MySQL按日期统计
- 在查询中进行统计
- MySql按日期进行统计(前一天、本周、某一天)
- MySql按日期进行统计(前一天、本周、某一天)
- MySql按日期进行统计(前一天、本周、某一天)
- MySql按日期进行统计(前一天、本周、某一天)
- MySql按日期进行统计(前一天、本周、某一天)
- MongoDB 日期查询与mongodump 按日期范围导出数据
- 记录一个mysql按日期分组统计的查询
- 记录一个mysql按日期分组统计的查询
- hdu3342 Legal or Not(简单拓扑排序判定)
- 圆形ImageView系列(一)-----Xfermode+View
- LightOJ--1149--Factors and Multiples(二分图好题)
- Android自定义属性限制
- ActionInvoker
- 如何在Java中对MongoDB按日期进行查询统计
- 〖原创〗使用Docker过程中注意事项之壹(文章末尾有彩蛋!)
- 【转】Android LockScreen admin API sample code
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
- zookeeper学习-2(如何使用zookeeper进行配置管理-java版本)
- 安全测试之缓冲区溢出(BO)
- Linux下编译的那些事
- bzoj 2194快速傅立叶之二
- javascript实现键盘按下回车时触发