在Spring MongoDB Repository中使用$ slice和@Query

时间:2018-03-16 15:50:16

标签: spring mongodb spring-boot jhipster

我正在使用Spring Boot和MongoDB。在这个项目中,我有一个域类ControlVariable,它有一个名为ControlVarEntries的数组属性。在我自己的findAll方法中检索它们时,我一直在尝试使用运算符$ slice来获取所有controlVars的最后五个controlVarEntries。在Mongo客户端中尝试时,此查询有效:

db.getCollection('controlVariable').find( {}, { controlVarEntries: { $slice: -5 } } )

但是,我在Spring Boot项目中使用@Query注释尝试了类似的方法,我无法检索相同的结果。例如,这会返回所有条目:

@Repository
public interface ControlVariableRepository extends MongoRepository<ControlVariable, String> {

    @Query("{ controlVarEntries: { $slice: ?0 } }")
    Page<ControlVariable> findAllLimitedNumberOfEntriesQuery(Pageable pageable, Integer numberOfEntries);

}

我想知道我的查询是否错误,或者我是否使用了正确的语法。

谢谢!

1 个答案:

答案 0 :(得分:1)

您必须在@Query注释中识别投影文档。

尝试

@Query(value="{}", fields = "{'controlVarEntries': { '$slice': ?0 } }")
Page<ControlVariable> findAllLimitedNumberOfEntriesQuery(Pageable pageable, Integer numberOfEntries);