java mongoTemplate的group统计

时间:2023-03-08 22:35:50
@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);

相关文章