JAVA操作mongodb比较字符串格式数值大小

今天工作中遇到的问题,刚接触mongo数据库嘛,要查指定范围的数据,数据是字符串类型的,结果用gte和lte查出来的数据总是不对。

通过查询得知:

MongoDB将字符串按UTF-8进行字典排序比较。

所以单纯地用gte和lte比较字符串数值大小是行不通的。

最后学习了前辈代码解决:

String commTimeFrom = (String) queryObject.get("commTimeFrom");
String commTimeTo = (String) queryObject.get("commTimeTo");
 if (StringUtils.isNotBlank(commTimeFrom)) {
       if (StringUtils.isNotBlank(commTimeTo)) {
            query.addCriteria(Criteria.where("$where").is(
            String.format("function () { return this.commTime >= %s && this.commTime <= %s; }", commTimeFrom, commTimeTo)));
            queryObject.removeField("commTimeFrom");
            queryObject.removeField("commTimeTo");
            } else {
                 query.addCriteria(Criteria.where("$where").is(
                 String.format("function () { return this.commTime >= %s; }", commTimeFrom)));
                 queryObject.removeField("commTimeFrom");
            }
  } else {
           if (StringUtils.isNotBlank(commTimeTo)) {
                  query.addCriteria(Criteria.where("$where").is(
                  String.format("function () { return this.commTime <= %s; }", commTimeTo)));
                  queryObject.removeField("commTimeTo");
           }
           }

 

可以参考的资料:https://www.cnblogs.com/yan7/p/9371205.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值