m1h*_*1h4 17 mongodb-java spring-data
我是使用MongoDB的Spring Data的新手,我希望在MongoRepository扩展接口中有一个自动生成的查询方法,需要过滤,排序和限制.
查询如下所示:
// 'created' is the field I need to sort against
find({state:'ACTIVE'}).sort({created:-1}).limit(1)
Run Code Online (Sandbox Code Playgroud)
存储库界面如下所示:
public interface JobRepository extends MongoRepository<Job, String> {
@Query("{ state: 'ACTIVE', userId: ?0 }")
List<Job> findActiveByUserId(String userId);
// The next line is the problem, it wont work since
// it's not in the format @Query expects
@Query("find({state:'ACTIVE'}).sort({created:-1}).limit(1)")
Job findOneActiveOldest();
...
}
Run Code Online (Sandbox Code Playgroud)
我知道可以将一个Sort参数添加到查询方法中以便进行排序,但问题是将结果限制为仅一个对象.这可以在不必编写自定义JobRepositoryImpl的情况下完成吗?
谢谢
编辑:
我正在寻找的例子:
@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)
要么
@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用:(
Oli*_*ohm 34
有什么不对:
public interface JobRepository extends MongoRepository<Job, String> {
@Query("{ state : 'ACTIVE' }")
Page<Job> findOneActiveOldest(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
// Keep that in a constant if it stays the same
PageRequest request = new PageRequest(0, 1, new Sort(Sort.Direction.DESC, "created"));
Job job = repository.findOneActiveOldest(request).getContent().get(0);
Run Code Online (Sandbox Code Playgroud)
只是对Oliver的答案添加一个修正,它是Direction.DESC和不是,Directions.DESC并且params的顺序是错误的.
变化:
PageRequest request = new PageRequest(0, 1, new Sort("created", Directions.DESC));
Run Code Online (Sandbox Code Playgroud)
至:
PageRequest request = new PageRequest(0, 1, new Sort(Direction.DESC, "created"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31507 次 |
| 最近记录: |