首页 > 解决方案 > mongotemplate中大小数的条件查询

问题描述

我有一个实体类,其中我有一个值作为薪水。工资的数据类型是 bigdecimal。现在我想对该实体执行一个查询,其中我有 2 个值,fromSalary 和 toSalary。我想要所有薪水 > fromSalary 和薪水 < toSalary 的员工。我使用 mongodb 作为数据存储,并为此操作使用 mongotemplate 标准查询。

Salary 为 Bigdeciaml,fromSalary 和 toSalary 为 Double。

我尝试了两种方法。

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

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

如何对 bigdecimal 进行范围操作?

标签: mongodbcriteriamongotemplate

解决方案


潜在的问题是Spring Data MongoDB默认将BigDecimalString转换为,因此您的薪水字段实际上是存储String在 MongoDB 中的。

@Field您可以使用如下注释修改默认转换:

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

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

您可以在此处查看 Christoph Strobl 的相关答案。


推荐阅读