В MongoDB, как фильтровать по местоположению, сортировать по другому полю и правильно разбивать результаты на страницы? - PullRequest
5 голосов
/ 09 февраля 2012

Когда я не использую нумерацию страниц, все работает нормально (у меня есть только 3 записи в этой коллекции, поэтому все они перечислены здесь):

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1})
{ "_id" : ObjectId("4f33ff549112b9b84f000070"), "badge" : 3, "name" : "Dedetizadora Alvorada" }
{ "_id" : ObjectId("4f33ff019112b9b84f00005b"), "badge" : 2, "name" : "Sampex Desentupidora e Dedetizadora" }
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" }

Но когда я пытаюсь выполнить разбиение на страницы с первой на вторую страницу, одна запись не отображается, а другая повторяется:

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1}).skip(0).limit(2)
{ "_id" : ObjectId("4f33ff549112b9b84f000070"), "badge" : 3, "name" : "Dedetizadora Alvorada" }
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" }

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1}).skip(2).limit(2)
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" }

Я что-то не так делаю или это какая-то ошибка?


редактирование:

Вот обходной путь для этого. По сути, вы не должны смешивать $ ближние запросы с сортировкой; вместо этого используйте $ в пределах.

1 Ответ

3 голосов
/ 09 февраля 2012

Существует открытая проблема по той же проблеме. Пожалуйста, посмотрите и проголосуйте Не удается выполнить подкачку геопространственного результата при сортировке с дополнительными ключами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...