如何在Java中对MongoDB按日期进行查询统计

如何在Java中对MongoDB按日期进行查询统计,第1张

方法一:通过构造BasicDBObject对象来进行查询

[java] view plain copy

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 = cltAppliesfind(query)count();

Systemoutprintln(iCount);

经测试上述代码执行完毕后iCount为9。也就是在2016-1-1至2016-1-31期间有9条记录。

方法二:通过BasicDBObjectBuilder对象来查询:

[java] view plain copy

int startYear=2016,endYear=2016;

int startMonth=1,endMonth=2;

int startDay=1,endDay=1;

BasicDBObject query= new BasicDBObject();

queryput("applydate", BasicDBObjectBuilderstart("$gte", new Date(startYear - 1900, startMonth - 1, startDay))add("$lt", new Date(endYear - 1900, endMonth - 1, endDay))get());

int iCount = cltAppliesfind(query)count();

Systemoutprintln(iCount);

上述代码执行后iCount同样为9。

注意:因为javautilDate(year,month,day)这个构造函数中year是超出1900的年数,所以需要减去1900;month从0开始,所以需要减去1。这个问题容易被初学者忽视。

下面扩展地说一下如果要进行带日期过滤条件的统计,该如何做。

前面的东西都相同,只是在统计的时候需要调用集合的distinct方法。如统计某个字段不重复的值有哪些,可用如下写法:

[java] view plain copy

int startYear=2016,endYear=2016;

int startMonth=1,endMonth=2;

int startDay=1,endDay=1;

BasicDBObject query= new BasicDBObject();

queryput("applydate", BasicDBObjectBuilderstart("$gte", new Date(startYear - 1900, startMonth - 1, startDay))add("$lt", new Date(endYear - 1900, endMonth - 1, endDay))get());

List<String> lstUserIds = cltAppliesdistinct("userId", query);

Systemoutprintln(lstUserIdssize());

上面这段代码的执行结果为4。也就是在2016-1-1至2016-1-31之间出现了4个不同的userId。

可以考虑用mongodb的固定集合存储,不过固定集合不允许修改和删除,也只能存储你设定大小的数据,有一定的限制,但是查询非常快,而且都是有序的。

或者你用普通集合存储,按时间和用户ID建立复合索引,这样查询的时候效率会提高不少,像这种日积月累的数据,最好有个分割线的存储机制,不常查询到的数据应该存储在其他表里,常常需要检索的数据应该单独存储,因为不是所有的用户每次都需要查询所有的历史记录,先就这些吧,欢迎补充更好的方法。

以上就是关于如何在Java中对MongoDB按日期进行查询统计全部的内容,包括:如何在Java中对MongoDB按日期进行查询统计、Mongodb存储用户历史数据,时间轴展示,怎么查询效率高、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9463609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存