获取按不同字段分组的多个列表

时间:2018-05-29 07:43:21

标签: mongodb spring-boot

我使用此方法向客户端发送多个列表。

 public ResponseEntity<?> getFiveLastRequestOfEachVehicleType() {
    ResponseContent content = getResponseContent();
    Map<String, List<Request>> map = new HashMap<>();
    GroupBy groupBy = new GroupBy();
    groupBy.initialDocument("vehicleTypeEnum");
    query = new Query();
    queryFieldsFilterLastFiveRequest(query, VehicleTypeEnum.NEISAN);
    map.put("NEISAN", mongoOperations.find(query, Request.class));
    query = new Query();
    queryFieldsFilterLastFiveRequest(query, VehicleTypeEnum.BADSAN);
    map.put("BADSAN", mongoOperations.find(query, Request.class));
    query = new Query();
    queryFieldsFilterLastFiveRequest(query, VehicleTypeEnum.BUJE);
    map.put("BUJE", mongoOperations.find(query, Request.class));
    content.setData(map);
    return getReturn(content);

}

此方法将标准应用于每个查询

private void queryFieldsFilterLastFiveRequest(Query query, VehicleTypeEnum vehicleTypeEnum) {
    query.addCriteria(Criteria.where("vehicleTypeEnum").is(vehicleTypeEnum));
    query.addCriteria(Criteria.where("unlock").is(true));
    query.fields()
            .include("id")
            .include("goodsTypeTitle")
            .include("originCityTitle")
            .include("price");
    query.limit(5);
}

我想知道是否有办法使用MongoOperations检索一个数据库请求中的所有列表。

1 个答案:

答案 0 :(得分:0)

我稍后会手动分组,首先查询所有vehicleType:

private void queryFieldsFilterLastFiveRequest(Query query, VehicleTypeEnum... vehicleTypeEnum..) {
    query.addCriteria(Criteria.where("vehicleTypeEnum").in(vehicleTypeEnum));
    query.addCriteria(Criteria.where("unlock").is(true));
    query.fields()
            .include("id")
            .include("goodsTypeTitle")
            .include("originCityTitle")
            .include("price");
    query.limit(5);
}

此处is已被in更改,并接受一个VehicleTypeEnum列表

然后使用它:

 public ResponseEntity<?> getFiveLastRequestOfEachVehicleType() {
    ResponseContent content = getResponseContent();
    Map<String, List<Request>> map;

    query = new Query();
    queryFieldsFilterLastFiveRequest(query, VehicleTypeEnum.NEISAN, VehicleTypeEnum.BADSAN, VehicleTypeEnum.BUJE);

    map = mongoOperations.find(query, Request.class).stream()
    .collect(Collectors.toMap(r -> r.getVehicleTypeEnum().name(),r -> r));
    content.setData(map);
    return getReturn(content);

}

这里我使用stream api将结果分类为VehiculeTypeEnum name