2012-02-09 2 views
5

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

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" } 

я делаю что-то неправильно, или это какая-то ошибка?


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

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

+0

@doorat, не могли бы вы добавить координаты местоположения всех трех документов. Я запустил его здесь и дам вам знать – RameshVel

+0

На самом деле ваш запрос не имеет большого смысла. '$ near' без параметра' $ maxDistance' возвращает весь список элементов, отсортированных по расстоянию от заданной точки. Вы пытаетесь сортировать по другому полю. Так почему же вам нужно «$ рядом»? – Dao

+0

@ Дао, ты прав, но я действительно использую атрибут $ maxDistance в коде, я просто забыл включить его в эти примерные запросы. –

ответ

Смежные вопросы