【问题标题】:Criteria query for big decimal in mongotemplatemongotemplate中大小数的条件查询
【发布时间】:2021-03-14 20:33:10
【问题描述】:

我有一个实体类,其中有一个值作为薪水。 工资的数据类型是 bigdecimal。 现在我想对该实体执行一个查询,其中我有 2 个值,fromSalary 和 toSalary。 我想要所有薪水 > fromSalary 和薪水

工资以 Bigdeciaml 为单位, fromSalary 和 toSalary 是 Double。

我尝试了两种方法。

Criteria.where(Salary).gte(new BigDecimal(fromSalary)).lte(new BigDecimal(toSalary))) ; Criteria.where(Salary).gte(fromSalary).lte(toSalary)) ;

当我执行这些操作时,即使我的数据库中有此范围内的数据,我在这两种情况下都会得到空响应。

如何对bigdecimal进行范围运算?

【问题讨论】:

    标签: mongodb criteria mongotemplate


    【解决方案1】:

    根本问题是Spring Data MongoDB converts BigDecimal values to String by default,因此您的salary 字段实际上在MongoDB 中存储为String

    您可以像这样使用@Field 注解修改默认转换:

    @Field(targetType = FieldType.DECIMAL128)
    private BigDecimal salary;
    

    这样,salary 字段的值将存储为 MongoDB 的原生 Decimal128 类型,并且您的问题中的查询将按您的预期工作。

    您可以查看 Christoph Strobl here 的相关答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2020-10-14
      • 2015-03-28
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多