解决kotlin语言下,Mongodb JPA @Query语句中$or等语句报错问题

问题

近日,在使用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>
Last modification:April 5th, 2020 at 12:08 pm
如果觉得我的文章对你有用,请随意赞赏