mongodb的聚合查询,里面包含枚举类型的查询时, 要转成String再做查询,否则会报:
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class ...
记录一下.
例如下例中的SearchLogType.USER.toString()
try { Criteria rightIntervalCR = Criteria.where("time").lt(rightIntervalDate); Criteria leftIntervalCR = Criteria.where("time").gte(leftIntervalDate); Criteria onlineCR = Criteria.where("type").is(SearchLogType.USER.toString());//只查询线上问的日志 String[] groupUseFields = {"userid"}; AggregationOperation matchOperation = new MatchOperation(leftIntervalCR.andOperator(onlineCR, rightIntervalCR)); AggregationOperation groupOperation = new GroupOperation(Fields.fields(groupUseFields)); AggregationOperation[] aggregationOperations = new AggregationOperation[2]; aggregationOperations[0] = matchOperation; aggregationOperations[1] = groupOperation; Aggregation aggregation = Aggregation.newAggregation(aggregationOperations); AggregationResultsaggregationResults = mongoOperation.aggregate(aggregation, logCollectionName, String.class); List useridList = aggregationResults.getMappedResults(); if (useridList != null) { for (String userid : useridList) { JsonObject useridJsonObject = GsonFactory.getGsonClient().fromJson((String) userid, JsonObject.class); String useridStr = useridJsonObject.get("_id").getAsString(); } } } catch (Exception e) { e.printStackTrace(); }