Spring数据MongoDB在投影中的条件

时间:2016-06-24 14:11:49

标签: spring-data spring-data-mongodb

如何在使用Spring Data进行聚合期间在我的投影阶段添加条件?

例如,我想添加将由公式new_field计算的field1 / field2。从代码方面看起来像:

ProjectionOperation projectionOperation = project("field1", "field2").andExpression("field1 / field2").as("field3");

但如果field2等于0,我会收到错误。因此,为了避免这种情况,建议使用$cond运算符,但我不知道它在代码中应该是什么样子。有人有什么想法吗?

请注意。表达式field2 != 0 ? 1 : 0不起作用(即使“SpEL”允许这样的语法)。

3 个答案:

答案 0 :(得分:1)

我只是遇到了同样的问题。 !=似乎不受支持,但是您可以在SPeL中使用“ ifNull”或“ cond”。

请参阅此处: how to use spel to represent $cond of mongo

这里有更多示例: https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/SpelExpressionTransformerUnitTests.java

答案 1 :(得分:0)

为时已晚,但是对于以后这个问题的读者来说,以下代码对我有用。当field2为0时,它将返回0作为field3的值。

ProjectionOperation projectionOperation = Aggregation.project("field1, field2")
                .and(AggregationSpELExpression.expressionOf("cond(field2 == 0, 0, field1/field2)"))
                .as("field3");

答案 2 :(得分:0)