Spring Boot集成MongoDB:如何直接查询prize>0的记录
解决Spring Boot MongoDB @Query参数索引不匹配的报错问题
嘿,这个问题我之前也踩过坑!咱们来一步步把它捋明白:
错误原因
你修改后的查询语句里还在用?1、?2、?3这些占位符,但方法参数已经从4个变成3个了。MongoDB的@Query注解里的参数占位符是从0开始按方法参数顺序编号的,现在参数少了一个,原来的索引就全部错位了,自然会报参数索引无效的错误。
正确的修改方式
把查询语句里的占位符索引对应调整成当前方法参数的顺序就好,具体来说:
- 原来的
?1(对应endDateAndTime)现在要改成?0 - 原来的
?2(对应apiName)改成?1 - 原来的
?3(对应service)改成?2
修改后的完整代码如下:
@Query("{'prize' : {$gt : 0 }, 'logDate' : {$lt : ?0} , 'api' : ?1 , 'service' : ?2}") List<SomeLog> findByLogDateBeforeAndApiAndService(Date endDateAndTime, ApiName apiName, String service);
更稳妥的小技巧:使用命名参数
如果怕以后参数增减导致索引混乱,推荐用命名参数的方式,可读性和维护性更好。只需要给方法参数加上@Param注解,然后在查询语句里用:参数名来引用:
@Query("{'prize' : {$gt : 0 }, 'logDate' : {$lt : :endDate} , 'api' : :apiName , 'service' : :service}") List<SomeLog> findByLogDateBeforeAndApiAndService( @Param("endDate") Date endDateAndTime, @Param("apiName") ApiName apiName, @Param("service") String service );
这样不管参数顺序怎么变,只要名字对应上就不会出错,也更直观。
内容的提问来源于stack exchange,提问作者tyro
相关产品推荐
相关产品推荐

