Как ограничить количество результатов в 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() при необходимости

Другие вопросы по тегам