2012-02-09 18 views
5

Quando non uso l'impaginazione, tutto funziona bene (ho solo 3 record in questa collezione, in modo che tutti di essi sono elencati qui):In MongoDB, come filtrare per posizione, ordinare per un altro campo e impaginare correttamente i risultati?

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

Ma quando provo a impaginare dal primo al seconda pagina, un record non è arrivato e si è ripetuto:

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

sto facendo qualcosa di sbagliato o è una specie di bug?


edit:

Here is una soluzione per questo. Fondamentalmente non dovresti mischiare $ vicino alle query con l'ordinamento; usa invece $ within.

+0

@doorat, puoi aggiungere le coordinate di posizione di tutti e tre i documenti ... lo eseguo qui e ti faccio sapere – RameshVel

+0

In realtà la tua query non ha molto senso. '$ near' senza parametro' $ maxDistance' restituisce tutti gli elenchi di elementi, ordinati per distanza dal punto dato. Si tenta di ordinare per un altro campo. Allora, perché hai bisogno di '$ near', quindi? – Dao

+0

@Dao, hai ragione, ma in realtà sto usando l'attributo $ maxDistance nel codice, ho appena dimenticato di includerlo in queste query di esempio. –

risposta

Problemi correlati