Você já tentou usar o framework de agregação?
Um pipeline de dois estágios pode funcionar:
- um $match estágio que usa sua consulta $geoWithin existente.
- um $sort estágio que classifica por
relevance: -1
Aqui está um exemplo de como pode ser:
db.foo.aggregate(
{$match: { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }},
{$sort: {relevance: -1}}
);
Não tenho certeza de como ele irá executar. No entanto, mesmo que seja ruim com o MongoDB 2.4, pode ser drasticamente diferente no 2.6/2.5, pois o 2.6 incluirá melhor desempenho de classificação de agregação .