如何在 spring 数据 mongodb 中的存储库方法上为 @Query 注释绑定 @Param?

How to bind @Param for @Query annotations on repository methods in spring data mongodb?

我正在使用带有 spring-data-mongodb 的最新 spring 引导,我正在尝试将带有 @Param 的存储库方法参数绑定到 @Query 注释中的查询.我已经看到几个使用 JPA 的 spring 数据示例,但 spring-data-mongodb 的示例不多。这是我试过的:

@Query(value = "{ 'bar': :param1 }")
FooModel getFooBySomeParam(@Param("param1") final String p1);

我目前不在工作,所以我没有具体的错误,但错误是在解析查询字符串时出现的。它正在寻找一个值,但找到了一个冒号。我假设我错误地指定了命名参数,因此当它在参数名称之前遇到前导冒号时解析失败,但我还没有看到如何使用 mongodb 存储库来执行此操作。

对于任何试图为 spring-data-mongodb 解决这个问题的人来说,它与 spring-data-jpa 版本不同。您不能仅使用冒号作为绑定参数名称的前缀。很高兴知道为什么 Spring 开发人员在这里没有保持一致性,但是源代码显示当您有查询方法时,可以像 :#{#boundParamName}?#{#boundParamName} 那样引用绑定的参数名称参数如 @Param("boundParamName") final String someStringValue.

另请注意,对于带有 @Query 注释的存储库查询方法,Collection 参数变量(如 ListSet 无法正确翻译,或者我有做错了。相反,将集合转换为数组(在您的业务逻辑中)并将其作为数组传递给查询方法。这是另一个让我困惑了一段时间的方面。

希望这对以后的人有所帮助。