java mongoTemplate的group统计

@Service
public class MongoCountServiceImpl implements MongoCountService {
    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<MongoCountDTO> count(String docName, String groupFeild, Query queryCondition) {
        //定义统计返回字段:默认添加以...分组的字段groupFeild、下面定义的count
        String reduce = "function(doc, aggr){" +
                "            aggr.count += 1;" +
                "        }";

        DBObject result = mongoTemplate.getCollection(docName).group(new BasicDBObject(groupFeild, 1),
                queryCondition.getQueryObject(),
                new BasicDBObject("count", 0),
                reduce);
        List<Map> list = (List) JSON.toJSON(result);

        List<MongoCountDTO> countList = new ArrayList<>();
        //组装全部
        long all = 0;
        if(CollectionUtils.isNotEmpty(list)) {
            for (Map o : list) {
                long cou = ((Double) o.get("count")).longValue();
                MongoCountDTO count = new MongoCountDTO((String) o.get(groupFeild), cou);
                countList.add(count);
                all = all + cou;
            }
        }
        MongoCountDTO allCount = new MongoCountDTO("全部", all);
        countList.add(0, allCount);
        return countList;
    }
}

 

 

如果想要返回多个字段值:

String reduce = "function(doc, aggr){" +
                "            aggr.count += 1;" +
                "            aggr.province = doc.insure_province;" +//这里是想返回的字段:自定义字段=mongo里doc的字段
                "        }";
        Query queryCondition = new Query();
        DBObject result = mongoTemplate.getCollection("policy").group(new BasicDBObject("vehicle_type_no", 1),
                queryCondition.getQueryObject(),
                new BasicDBObject("count", 0),
                reduce);
        List<Map> list = (List) JSON.toJSON(result);

 

posted @ 2017-06-20 14:48  艺言弈行  阅读(2749)  评论(0编辑  收藏  举报