2012-02-09 11 views
5

Kiedy nie używać paginacji, wszystko działa dobrze (mam tylko 3 rekordy w tej kolekcji, więc wszystkie z nich są wymienione tutaj):W MongoDB, jak filtrować według lokalizacji, sortować według innego pola i prawidłowo paginować wyniki?

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

Ale gdy próbuję paginate od pierwszego do druga strona, jeden rekord nie pokazuje się i jeden powtarza:

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

robię coś źle, czy jest to jakiś bug?


edit:

Here is obejście tego. Zasadniczo nie powinieneś mieszać $ near queries z sortowaniem; zamiast tego użyj $ wewnątrz.

+0

@doorat, czy możesz dodać współrzędne lokalizacji wszystkich trzech dokumentów. Uruchomię to tutaj i powiadomię – RameshVel

+0

W rzeczywistości twoje zapytanie nie ma większego sensu. '$ near' bez parametru' $ maxDistance' zwraca całą listę pozycji posortowaną według odległości od podanego punktu. Próbujesz sortować według innego pola. Dlaczego więc potrzebujesz '$ near'? – Dao

+0

@Dao, masz rację, ale faktycznie używam atrybutu $ maxDistance w kodzie, po prostu zapomniałem dołączyć go do tych przykładowych zapytań. –

Odpowiedz

Powiązane problemy