如何限制ReactiveMongoRepository中的结果数

时间:2018-09-24 16:19:41

标签: spring spring-data-mongodb reactor

我正在寻找一种将限制传递给ReactiveCrudRepository中的mongo查询的方法

我尝试在方法名称中添加“ First2”,但仍获得所有结果。

我真正在寻找的是一种将'limit'值传递给该方法的方法,将其作为@RequestParam int limit传递给请求

这是我的存储库代码

public interface ReactiveUserRepository
        extends ReactiveCrudRepository<User, String> {


    @Query("{ 'roles': ?0 }")
    Flux<User> findFirst2ByRole(String role);
}

这是控制器方法:

@GetMapping(path = "/byrole", produces = "application/stream+json")
    Flux<User> getByRole(@RequestParam String role) {
        return users.findFirst2ByRole(role).doOnNext(next -> {
            System.out.println("Next user=" + next.getAssocId());
        }).switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND, String.format("No users found with role=%s", role))));
    }

2 个答案:

答案 0 :(得分:0)

尝试使用反应堆方法users.findFirst2ByRole(role).take(2) 您也可以根据需要使用skip()

答案 1 :(得分:0)

通量上的

limitRequest(long)也许也值得一看:https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#limitRequest-long-

  

它可以用作take(long)的更严格形式

因为它确实限制了向上游源发出的请求量。当只需要有限数量的数据时,这可能会阻止反应式MongoDB驱动程序请求/加载大量数据。

在使用limitRequest时,请确保所提供的long为“> 0”(<0没有意义,= 0表示永远无法完成Flux)