¿Has probado a usar el marco de agregación?
Una canalización de dos etapas podría funcionar:
- una coincidencia de $ etapa que usa su consulta $geoWithin existente.
- una clasificación de $ etapa que ordena por
relevance: -1
Este es un ejemplo de cómo podría verse:
db.foo.aggregate(
{$match: { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }},
{$sort: {relevance: -1}}
);
No estoy seguro de cómo funcionará. Sin embargo, incluso si es pobre con MongoDB 2.4, podría ser dramáticamente diferente en 2.6/2.5, ya que 2.6 incluirá rendimiento mejorado de clasificación por agregación .