問題解決:mongotemplate比較數據庫中的字符串數值 query & Criteria

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語法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章