Как ограничить количество результатов в ReactiveMongoRepository
Я ищу способ передать ограничение монго-запроса в ReactiveCrudRepository
Я попытался добавить "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))));
}
0 ответов
Limit Request(long) на Flux также стоит взглянуть на: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html
его можно использовать как более строгую форму take(long)
Поскольку он ограничивает сумму запроса, которая поступает к исходному источнику. Это может помешать реактивному драйверу MongoDB запрашивать / загружать огромный пакет данных, когда требуется только ограниченное количество.
При использовании limitRequest убедитесь, что предоставленное значение long равно "> 0" (<0 не имеет смысла, а =0 приводит к тому, что Flux никогда не завершается)
Попробуйте использовать реакторный метод users.findFirst2ByRole(role).take(2), также вы можете использовать skip() при необходимости