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

  在上篇博文中,我通过封装的一个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;
     }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值