У меня есть разбитое на страницы 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
всегда удаляется?