mongodb - 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 进行范围操作?
解决方案
潜在的问题是Spring Data MongoDB默认将BigDecimal
值String
转换为,因此您的薪水字段实际上是存储String
在 MongoDB 中的。
@Field
您可以使用如下注释修改默认转换:
@Field(targetType = FieldType.DECIMAL128)
private BigDecimal salary;
这样,salary 字段的值将存储为 MongoDB 的本机Decimal128
类型,并且您问题中的查询将按您的预期工作。
您可以在此处查看 Christoph Strobl 的相关答案。
推荐阅读
- batch-file - 编写一个批处理文件,该文件将运行 mmc 命令并为用户添加管理单元证书
- android - java.lang.IllegalStateException:应在主线程上调用,但在 Android 中是 RxCachedThreadScheduler
- sql - 在 TDengine 中执行批量插入时出错
- docker - 容器以代码 0 退出,我的应用程序由主机操作系统提供
- java - 中继 S3 存储桶访问还是为用户提供直接访问链接?
- java - PDF/A-3A 文档的 PAdES LTV 签名产生无效签名
- ios - 未调用 ViewController 文件
- node.js - 我正在尝试对猫鼬数据库中的数据进行排序,并使用 find() 函数获取输出,但我想使用 paginate() 函数对数据进行排序
- react-native - 在 react-native 上将 base64 转换为 blob 时获取错误
- python - Self Attention 不如 RNN 好?