Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB/Spring中具有多种条件的Concat_Spring_Mongodb_Spring Data Mongodb - Fatal编程技术网

MongoDB/Spring中具有多种条件的Concat

MongoDB/Spring中具有多种条件的Concat,spring,mongodb,spring-data-mongodb,Spring,Mongodb,Spring Data Mongodb,我正在尝试实现一个MongoDB查询,以便对范围内的数据进行分组和计数。我发现了一篇来自Lee Sherwood的精彩文章,解释了如何实现这一点,并将其与我的数据库一起重用。问题是我正在使用Spring,我需要使用Java编写它。我成功地编写了聚合的两个部分,但我仍然坚持这一部分: $project: { "range": { $concat: [ { $cond: [{ $and:[ {$gt:["$dose", 0 ]}, {$lt: ["$d

我正在尝试实现一个MongoDB查询,以便对范围内的数据进行分组和计数。我发现了一篇来自Lee Sherwood的精彩文章,解释了如何实现这一点,并将其与我的数据库一起重用。问题是我正在使用Spring,我需要使用Java编写它。我成功地编写了聚合的两个部分,但我仍然坚持这一部分:

$project: {
    "range": {
        $concat: [
            { $cond: [{ $and:[ {$gt:["$dose", 0 ]}, {$lt: ["$dose", 50]}]}, "0-50", ""] },
            { $cond: [{ $and:[ {$gt:["$dose", 50 ]}, {$lt: ["$dose", 100]}]}, "50-100", ""] },
            { $cond: [{ $and:[ {$gt:["$dose", 100 ]}, {$lt: ["$dose", 150]}]}, "100-150", ""] },
            { $cond: [{ $and:[ {$gt:["$dose", 150 ]}, {$lt: ["$dose", 200]}]}, "150-200", ""] },
            { $cond: [{ $and:[ {$gt:["$dose", 200 ]}, {$lt: ["$dose", 250]}]}, "200-250", ""] },
            { $cond: [{ $and:[ {$gt:["$dose", 250 ]}, {$lt: ["$dose", 300]}]}, "250-300", ""] },
            { $cond: [{ $gte:["$dose", 300] }, "300+", ""]}
        ]
    }
}
这是我现在的代码:

    ProjectionOperation.ProjectionOperationBuilder projectBuilder = Aggregation.project().and("dose");
    for (int startRange = 0; startRange <= 350; startRange += step) {
        int endRange = startRange + step;
        projectBuilder.concat(...)
    }
    return projectBuilder.as("range");
ProjectionOperation.ProjectionOperationBuilder projectBuilder=Aggregation.project()和(“dose”);

对于(int startRange=0;startRange您可以使用switch语句和条件来完成此操作。我在下面编写了一个带有1个案例的示例。根据需要添加尽可能多的案例以满足您的范围要求

List<AggregationOperation> operationList = new ArrayList<>();
List<ConditionalOperators.Switch.CaseOperator> cases = new ArrayList<>();
ConditionalOperators.Switch.CaseOperator cond1 = ConditionalOperators.Switch.CaseOperator
    .when(BooleanOperators.And.and(
        ComparisonOperators.valueOf("dose").greaterThanValue(0), 
        ComparisonOperators.valueOf("dose").lessThanValue(50)))
    .then("0-50");
cases.add(cond1);

ProjectionOperation projectionOperation = Aggregation.project()
    .and(ConditionalOperators.switchCases(cases)).as("range");
operationList.add(projectionOperation);

System.out.println(aggregation.toString());
List operationList=newarraylist();
列表案例=新建ArrayList();
ConditionalOperators.Switch.CaseOperator cond1=ConditionalOperators.Switch.CaseOperator
.when(布尔运算符)和(
比较运算符。值(“剂量”)。大于值(0),
比较运算符。值(“剂量”)。小于值(50)
。然后(“0-50”);
增加(第1条);
ProjectOnOperation ProjectOnOperation=Aggregation.project()
.和(条件运算符.开关箱(箱)).as(“范围”);
操作列表。添加(ProjectOnOperation);
System.out.println(aggregation.toString());
使用开关箱: