我正在使用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);
}
我想知道我的查询是否错误,或者我是否使用了正确的语法。
谢谢!
答案 0 :(得分:1)
您必须在@Query注释中识别投影文档。
尝试
@Query(value="{}", fields = "{'controlVarEntries': { '$slice': ?0 } }")
Page<ControlVariable> findAllLimitedNumberOfEntriesQuery(Pageable pageable, Integer numberOfEntries);