Весенние данные Mongodb ближе клетку не работают с запросом. С (Pageable)

StackOverflow https://stackoverflow.com//questions/24004015

Вопрос

Я использую Spring-data-mongoDB, чтобы сделать страницу на результатах Pagination на результатах Geo MongoDB.

Вот соответствующий код (с Mongotemplate):

Query query = new Query();
query.addCriteria(where("location").nearSphere(new Point(longitude, latitude)).maxDistance(0.012));
query.with(pageable);

//On any page other than the first page
//the following list is always empty (although the total number of records is much bigger than the page size)
List<MyObject> myObjects = mongoTemplate.find(query, MyObject.class);
.

Первая страница (т. Е. Страница: 0, размер: 5) Всегда отображается правильно, все остальные страницы (т. Е. Страница: 1, размер: 5) не содержит результатов, поскольку указанный список будет пустым. .

Если я прокомментирую строку 2 ///query.addcriteria (ничто («"Подация »). Близнешнее (...), Пагинация работает правильно.

Кстати, я не могу использовать mongotemplate.geonear () Так как он не поддерживает, включает в себя / исключить в соответствии с

Это было полезно?

Решение

Я нашел обходной путь сам.Кажется, Mongodb имеет непоследовательное поведение на «Skip + Limit» между $ близочной площадью (может быть также $ рядом) и другие запросы.

пока вы можете сделать

db.doc.find().skip(10).limit(5)
.

с «регулярными» запросами, вы должны использовать

db.doc.find({
   'location': {
       $nearSphere: ...,
       $maxDistance: ...
   }
}).skip(10).limit(15) //note the number for limit has to be 15, which
                      //is 'offset + pageSize' <==> '10 + 5'
.

для $ ближайшихsphere queries.

Так что в Spring-data-mongoDB, с монготемперацией, вы можете сделать это

int offset = pageable.getOffset();
query.skip(offset);
query.limit(offset + pageable.getPageSize());
...
mongoTemplate.find(query, ...);
.

вместо

query.with(pageable);
...
mongoTemplate.find(query, ...);
.

Это дало мне ожидаемые результаты (с Mongodb 2.6.1 + пружинные данные MongoDB 1.5.1).

Я не могу сказать, если это ошибка MongoDB, но, по крайней мере, это выглядит запутанным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top