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



是否可以在 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);

可以尝试:

@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

怕 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 会添加与 JpaRepository for NoSql 相同的功能。但是现在,它不提供此功能。

最新更新