gpt4 book ai didi

spring-data - 在 Spring Repository 接口(interface)中使用 sort() 和 limit() 进行查询

转载 作者:行者123 更新时间:2023-12-03 13:42:56 26 4
gpt4 key购买 nike

我是 MongoDB 的 Spring Data 新手,希望在我的 MongoRepository 扩展接口(interface)中有一个自动生成的查询方法,需要过滤、排序和限制。

查询如下所示:

// 'created' is the field I need to sort against

find({state:'ACTIVE'}).sort({created:-1}).limit(1)

存储库界面如下所示:
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();

...
}

我知道可以将 Sort 参数添加到查询方法中以进行排序,但问题是将结果限制为单个对象。这是否可以在不必编写自定义 JobRepositoryImpl 的情况下完成?

谢谢

编辑:

我正在寻找的示例:
@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();

或者
@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();

但这显然不起作用:(

最佳答案

有什么问题:

public interface JobRepository extends MongoRepository<Job, String> {

@Query("{ state : 'ACTIVE' }")
Page<Job> findOneActiveOldest(Pageable pageable);
}

并使用它:
// 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);

关于spring-data - 在 Spring Repository 接口(interface)中使用 sort() 和 limit() 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com