0x00 問題描述
今天接到一個bug發現範圍查詢失效了,經過簡單的排查發現在業務開始的時候,將數據庫的dao類中的取現字段定義成了string 導致存入mongo時爲string,而在寫查詢時,卻未在意,導致gte和lte無效。
0x01 解決方案
經過了解相關資料,可以找到mongo中有相關的查詢如下
db.collectionName.find({"$where":"this.field>xxx"})
轉化爲Java代碼如下所示:
// 此處只寫核心代碼
query.addCriteria(Criteria.where("$where").is(
String.format("function () {this.field > %s;}", param)
));
其中function 是一個函數,可實現複雜的查詢,裏面的語法爲js語法。