本文首发于在下的个人博客:keysking瞎写的东西
问题
近日,在使用kotlin写springboot的项目,数据库使用的是MongoDB,使用JPA进行数据库操作.
以前都是直接写接口函数,让JPA自动生成查询语句,就像这样:
fun findTemperaturesByGroupIdAndTimeBetween(groupId: String, start: Date, end: Date): List<Temperature>
但是,今天遇见一个需求,想自定义一下查询语句,于是有了下面的代码:
@Query("{'$or':[{temperature:{$gte':37.2}},{'abnormal':true}]}")
fun findDangerTemperatures(temperature: Double): List<Temperature>
@Query注解里写的是正常的MongoDB查询语句,到网上查着别人写的,也确实是这么写,但就是报错
这令我很是迷惑
到网上查了又查,确实这样写啊,别人都是这样写的,没什么问题啊
…
…
后来,突然脑中顿悟,在kotlin中的字符串中"$"符号是有作用的,用于引入变量的值
而我查到的都是java的代码,用kotlin写springboot的人本来就少,用mongoDB的就又少,自然网上没有相关的问题.(又或者是只有我这么笨)
于是,代码改成下面的样子,将"$"输出一下,问题就解决了:
@Query("{'${'$'}or':[{temperature:{'${'$'}gte':37.2}},{'abnormal':true}]}")
fun findDangerTemperatures(temperature: Double): List<Temperature>