大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

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

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

创新互联建站专注于淮上网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供淮上营销型网站建设,淮上网站制作、淮上网页设计、淮上网站官网定制、成都微信小程序服务,打造淮上网络公司原创品牌,更为您提供淮上网站排名全网营销落地服务。

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

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

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;
    }


标题名称:Java实现MongoDB的日期(Date)分组功能
文章位置:http://dzwzjz.com/article/psicdj.html
在线咨询
服务热线
服务热线:028-86922220
TOP