Обновление до Spring Boot Mongodb 2.2.X скрывает результаты конвейера GeoNear Aggregate после 100 записей - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть разбитое на страницы API, поддерживаемое Aggregation с шагом конвейера $geoNear. В Mon go версиях до 4.2 агрегации $geoNear имели ограничение по умолчанию 100.

Чтобы избежать этого, можно было задать для поля num большое значение для NearQuery.

    Query query = new Query();
    ...
    NearQuery nearQuery = NearQuery.near(...);
    nearQuery.query(query);

    //force the geoNear operation to return more than 100 results
    nearQuery.num(Integer.MAX_VALUE);

    List<AggregationOperation> steps = Lists.newArrayList(geoNear(nearQuery, "distance"));
    //add skip and limit operations to mimic pagination functionality
    steps.add(skip(pageable.getPageNumber() * pageable.getPageSize()));
    steps.add(limit(pageable.getPageSize()));

    Aggregation agg = Aggregation.newAggregation(steps);
    ...

В понедельник go версия 4.2 удалено поле num, а также ограничение в 100 результатов (описано здесь в первой заметке). В ответ на это GeoNearOperation.java было обновлено в spring-data-mongodb для удаления поля num.

Теперь я бы понял, что если бы я подключился к серверу MongoDb под управлением версии 4.2 все будет работать как есть (отказ от ответственности: я не пробовал этого). Тем не менее, я использую локальную версию 4.0.5 и версию 3.6.12 в производстве. Используя spring-boot-starter-data-mongodb с версией 2.1.13.RELEASE, вышеприведенный код работает, а нумерация страниц разбивается на 100 результатов. Обновление до 2.2.0.RELEASE приводит к тому, что вышеуказанное значение Aggregation больше не возвращает 100 результатов.

Как я должен запрашивать базу данных MongoDB для версии старше 4.2 с веткой 2.2.X spring-data-mongodb, если поле num всегда удаляется?

...