mongodb学习笔记
mongodb分组查询:
//构建查询条件
Criteria criteria = Criteria.where("systemCode").is(systemCode).and("interfaceCode").is(interfaceCode).and("createTime").gte(timeStart).lte(timeEnd);
//根据status进行分组
GroupBy groupBy = GroupBy.key("status").initialDocument("{ count: 0 }").reduceFunction("function(doc, prev) { prev.count += 1 }");
GroupByResults<?> results = this.mongoTemplate.group(criteria, inputCollectionName, groupBy, Map.class);
BasicDBList list = (BasicDBList)results.getRawResults().get("retval");
for(int i=0;i<list.size();i++){
BasicDBObject obj = (BasicDBObject)list.get(i);
String key = "" + obj.getLong("status");
long count = obj.getLong("count");
}
mongodb聚合查询
Criteria criteria = Criteria.where("systemCode").is(systemCode).and("interfaceCode").is(interfaceCode).and("createTime").gte(timeStart).lte(timeEnd);
TypedAggregation<SyncInterfaceDetailEntity> agg = Aggregation.newAggregation(SyncInterfaceDetailEntity.class,
Aggregation.match(criteria),
Aggregation.sort(Sort.Direction.DESC, "cost"),
//最终返回的字段 和 sum(case when)的用法 如去除_id字段Aggregation.project("cost").andExclude("_id")
Aggregation.project("result", "cost").and("overcost").applyCondition(Cond.newBuilder().when(Criteria.where("cost").gte(costThreshold)).then(1).otherwise(0)), Aggregation.group().count().as("total").sum("result").as("totalFail").max("cost").as("maxCost").sum("overcost").as("overCost") ); AggregationResults<BasicDBObject> result = this.mongoTemplate.aggregate(agg, inputCollectionName,BasicDBObject.class); BasicDBObject obj = result.getUniqueMappedResult();
mongodb mapreduce查询
Criteria criteria = Criteria.where("systemCode").is(systemCode).and("interfaceCode").is(interfaceCode).and("createTime").gte(timeStart).lte(timeEnd);
String mapFunction = "function Map() {emit({\"interfaceCode\":this.interfaceCode},{cost: this.cost});}";
String reduceFunction = "function Reduce(key, values) {var reduced = {costs:''};values.forEach(function(val) {reduced.costs += val.cost+',';});return reduced;}";
MapReduceResults<BasicDBObject> a = this.mongoTemplate.mapReduce(new Query(criteria).with(new Sort(new Order(Direction.DESC, "cost"))),inputCollectionName, mapFunction, reduceFunction, BasicDBObject.class);
for (BasicDBObject valueObject : a) {
System.out.println("-------"+valueObject);//返回结果{"_id":{"interfacecode":"aaa"},"value":{"costs":"10,9,8,7,6"}}
}
浙公网安备 33010602011771号