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

问题描述 投票:1回答:1

基本上,我有两个字段“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")

但如果条件为真,则总是在“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")

它按预期工作。

java spring kotlin spring-data-mongodb
1个回答
0
投票

使用'$'和字段名称,因为您正在传递对该字段的引用。以下查询应该工作:

project("day", "month", "year")
                    .and(
                        ConditionalOperators.when(
                            ComparisonOperators.Eq.valueOf("$totalAmountWithShipping").equalToValue(0.0)
                    ).thenValueOf("$totalAmountPlusShipping").otherwiseValueOf("$totalAmountWithShipping")).as("realTotalAmount")
© www.soinside.com 2019 - 2024. All rights reserved.