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


相关文章

这篇文章主要介绍“hive和mysql的区别是什么”,在日常操作中...
这篇“MySQL数据库如何改名”文章的知识点大部分人都不太理解...
这篇文章主要介绍“mysql版本查询命令是什么”的相关知识,小...
本篇内容介绍了“mysql怎么修改字段的内容”的有关知识,在实...
这篇文章主要讲解了“mysql怎么删除unique约束”,文中的讲解...
今天小编给大家分享一下mysql怎么查询不为空的字段的相关知识...