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.
@doorat, por favor, puede agregar las coordenadas de ubicación de los tres documentos ... lo ejecutaré aquí y le dejaré saber – RameshVel
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
@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. –