2012-02-09 18 views
5

Cuando yo no uso paginación, todo funciona bien (tengo sólo 3 registros en esta colección, por lo que todos ellos figuran en esta lista):En MongoDB, ¿cómo filtrar por ubicación, ordenar por otro campo y paginar los resultados correctamente?

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

Pero cuando intento paginar desde el primero hasta el segunda página, un registro no se presenta y uno se repite:

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

estoy haciendo algo mal o se trata de una especie de bichos?


edición:

Here is una solución para esto. Básicamente, no debe mezclar $ consultas cercanas con la clasificación; use $ dentro en su lugar.

+0

@doorat, por favor, puede agregar las coordenadas de ubicación de los tres documentos ... lo ejecutaré aquí y le dejaré saber – RameshVel

+0

En realidad, su consulta no tiene mucho sentido. '$ near' sin el parámetro' $ maxDistance' devuelve toda la lista de elementos, ordenados por distancia del punto dado. Intentas ordenar por otro campo. Entonces, ¿por qué necesitas '$ near', entonces? – Dao

+0

@Dao, tienes razón, pero en realidad estoy usando el atributo $ maxDistance en el código, me olvidé de incluirlo en estas consultas de muestra. –

Respuesta

Cuestiones relacionadas