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");
}
}

上一篇 Apache 日志存储权限设置(Windows + Linux 完整教程)
下一篇 S9706 删除license文件报错,可能是系统文件