Java实现MongoDB的日期(Date)分组功能

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

 在上篇博文中,我通过封装的一个Java接口实现了MongoDBGroup功能,但是没有讲怎么根据日期Date查询,这里补充一下,如何完善MongoDB的日期Group功能。


  在实现Group功能时,通常还要附带一些条件,查询分组时只查询状态为已完成的或者未完成的,再或者查询某个日期时间段内符合条件的分组。这时候,如果在Reduce中设置符合条件的日期再计数,你会发现MongoDB完全忽略了日期。为什么?因为语法不对。


  在MongoDB中查询特定条件的分组时,应该把这些条件放到Condition中,具体怎么做,还是看下面的代码吧。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public  String getCTOStatistic()  throws  Exception {
         String ctoTaskType = getParameterValue( "ctoTaskType" ).toString();
         String startDate = getParameterValue( "startDate" ).toString();
         String endDate = getParameterValue( "endDate" ).toString();
         DBObject initial =  new  BasicDBObject();
         DBObject index =  new  BasicDBObject();
         BasicDBObject cond =  new  BasicDBObject();
         BasicDBObject dateCondition =  new  BasicDBObject();
           
         index.put( "count" 0 );
         index.put( "ctoPerson" "" );
         initial.put( "ctoPerson" , index);
           
         cond.put( "ctoStatus" "Finished" );
         if (StringUtils.isNotEmpty(ctoTaskType)){
             cond.put( "taskId" , ctoTaskType);
         }
         if (StringUtils.isNotEmpty(startDate)){
             dateCondition.append( "$gte" , DateUtil.toDate(startDate));
         }
         if (StringUtils.isNotEmpty(endDate)){
             dateCondition.append( "$lt" , DateUtil.toDate(endDate));
         }
         cond.put( "jobCreateTime" ,dateCondition);
           
           
         String reduce =  "function (doc, out) { "
             " out.ctoPerson.count = out.ctoPerson.count+=1; "
             " out.ctoPerson.ctoPerson = doc.ctoPerson;"
         "}" ;
           
           
         BasicDBList group = (BasicDBList) ctoJobService.group(
                 new  String[] {  "ctoPerson" }, cond, initial, reduce,  null );
           
         this .jsonResult = group.toString();
         return  SUCCESS;
     }





本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1313959,如需转载请自行联系原作者

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
30天前
|
运维 监控 JavaScript
JAVA村卫生室、诊所云HIS系统源码 支持医保功能
运维运营分系统 1、系统运维:环境管理、应用管理、菜单管理、接口管理、任务管理、配置管理 2、综合监管:统计监管的医疗机构的综合信息,包括医疗业务量、人员配备量、支付分类占比等。 3、系统运营:机构管理、药品目录管理、用户管理、角色管理、字典管理、模板管理、消息管理、运营配置、售后服务、外部系统。
29 0
|
1月前
|
Java
【Java每日一题】— —第二十一题:编程把现实生活的手机事物映射成一个标准类Phone,并定义一个测试类PhoneDemo测试Phone类的功能
【Java每日一题】— —第二十一题:编程把现实生活的手机事物映射成一个标准类Phone,并定义一个测试类PhoneDemo测试Phone类的功能
35 0
|
1月前
|
安全 Java 数据库连接
【Java每日一题】——第四十四题:综合案例:编程模拟智能手机和普通手机功能。
【Java每日一题】——第四十四题:综合案例:编程模拟智能手机和普通手机功能。
40 0
|
29天前
|
Java
java中日期处理的一些工具方法
java中日期处理的一些工具方法
17 1
|
10天前
|
Java BI
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
|
12天前
|
Java
java判断时间是否为节假日(或指定的日期),是的话返回true,否返回false
java判断时间是否为节假日(或指定的日期),是的话返回true,否返回false
21 0
|
29天前
|
Java
java中,根据指定日期显示出前n天的日期
java中,根据指定日期显示出前n天的日期
9 0
|
30天前
|
JSON 前端开发 Java
|
1月前
|
存储 Java API
Java统计功能
Java统计功能
13 0
|
1月前
|
存储 搜索推荐 Java
Java筛选功能的秘密
Java筛选功能的秘密
12 0