MongoDb Spring 存储库的@Query 命名参数

@Query named parameters for MongoDb Spring repository

是否可以在 mongodb 存储库中为 @Query 方法使用命名参数,就像我们可以使用 jpa 存储库(http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html 第 2.3.5 节)一样?

例如,我想使用以下代码:

@Query("{'store' : :store, 'app' : :app }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

而不是:

@Query("{'store' : ?0, 'app' : ?1 }")
List<T> findByStoreAndApp(String store, String app);

恐怕 spring 引导程序在其源代码中确实提供了此功能。

您可以创建一个接口并扩展 MongoRepository 它提供了一些简单的方法,你不需要实现它。 就像使用 JpaRepository 一样。

@NoRepositoryBean
public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
    <S extends T> List<S> save(Iterable<S> var1);

    List<T> findAll();

    List<T> findAll(Sort var1);

    <S extends T> S insert(S var1);

    <S extends T> List<S> insert(Iterable<S> var1);
}

但是,如果你需要做一些特殊的查询。您可以只 @Autowired MongoTemplate 并使用它自己的方法。而对于redis,springboot甚至没有像MongoRepository那样提供Repository。您可以只使用 StringRedisTemplate 之类的模板进行查询操作。 可能是后者,spring boot 会为 NoSql 添加与 JpaRepository 相同的功能。但是现在,它不提供这个功能。

有可能,试试:

@Query("{'store' : :#{#store}, 'app' : :#{#app} }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

@Query 中对 SpEL 表达式的支持是在 Spring Data MongoDB 1.8 中引入的。

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.projection.expressions