在上篇博文中,我通过封装的一个Java接口实现了mongoDB的Group功能,但是没有讲怎么根据日期Date查询,这里补充一下,如何完善MonGoDB的日期Group功能。 在实现Group功能时,
在上篇博文中,我通过封装的一个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;
}
--结束END--
本文标题: Java实现MongoDB的日期(Date)分组功能
本文链接: https://www.lsjlt.com/news/42792.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0