您的位置:首页 > 编程语言 > Java开发

Spring 整合 mongoTemplate 聚合查询统计

2018-02-06 09:43 197 查看

   最近开发医院表单系统,表单数据存入mongodb,需要根据某一字段进行统计,然而存取的内容字段是不确定的,统计的话不能按照创建实体类那样进行查询统计,先开始使用 Aggregation进行统计是没有问题的,本地测试通过,代码如下

Aggregation aggregation  = Aggregation.newAggregation("groupField").count().as("value"));
Aggregation aggregation  = Aggregation.newAggregation("groupField").count().as("value"));
Criteria criteria = where("filed").is("value");
aggregation.match(criteria);
List<Map> maps = mongoTemplate.aggregate(aggregation,collectionName,Map.class).getMappedResults();
            for(Map map:maps){String id = (String)map.get("_id");String value = map.get("value")+"";if(!StringUtils.isEmptyParam(id)){MongoResultVo mongoResultVo = new MongoResultVo();mongoResultVo.setName(id);mongoResultVo.setValue(Integer.valueOf(value));mongoResultVos.add(mongoResultVo);}}
然而更新正式时却报错了,尼玛,查看日志发现是服务器mongodb的版本为3.6版本过高得使用游标遍历结果,随后改变思路换种方式查询,经测试在本地和正式都无问题代码如下
Criteria criteria = where("filed").is("value");
GroupBy groupBy = GroupBy.key(mongoQueryVo.getTarget()).initialDocument("{value:0}").reduceFunction("function(doc,prev){prev.value+=1}");GroupByResults<BasicDBObject> groupByResults = mongoTemplate.group(criteria,collectionName,groupBy,BasicDBObject.class);Iterator iterator = groupByResults.iterator();
随后遍历获得结果即可,就不再写了




阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: