今天工作中遇到的问题,刚接触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