Spring数据条件投影无法按预期工作

时间:2019-02-21 13:04:40

标签: java spring kotlin spring-data-mongodb

基本上,我有两个字段“ totalAmountWithShipping”和“ totalAmountPlusShipping”,如果“ totalAmountWithShipping”大于0,则想将“ totalAmountWithShipping”投影到一个名为“ realTotalAmount”的新字段,否则将项目“ totalAmountPlusShipping”投影为“ realTotalAmount”

我尝试过:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.`when`(
                            ComparisonOperators.Eq.valueOf("totalAmountWithShipping").equalToValue(0.0)
                    ).thenValueOf("totalAmountPlusShipping").otherwiseValueOf("totalAmountWithShipping")).`as`("realTotalAmount")

,但如果条件为true,则始终在“ realTotalAmount”上获得0.0(即,如果我计划为“ totalAmountPlusShipping”)。但是,如果条件为假,它应该可以正常工作。

如果我尝试:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.`when`(
                            ComparisonOperators.Eq.valueOf("totalAmountWithShipping").equalToValue(0.0)
                    ).then(100.0).otherwise(1.0)).`as`("realTotalAmount")

它按预期工作。

1 个答案:

答案 0 :(得分:0)

因为要传递对该字段的引用,所以在字段名中使用“ $”。以下查询应该起作用:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.when(
                            ComparisonOperators.Eq.valueOf("$totalAmountWithShipping").equalToValue(0.0)
                    ).thenValueOf("$totalAmountPlusShipping").otherwiseValueOf("$totalAmountWithShipping")).as("realTotalAmount")