Avez-vous essayé d'utiliser le framework d'agrégation ?
Un pipeline en deux étapes pourrait fonctionner :
- un $match étape qui utilise votre requête $geoWithin existante.
- un $sort étape qui trie par
relevance: -1
Voici un exemple de ce à quoi cela pourrait ressembler :
db.foo.aggregate(
{$match: { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }},
{$sort: {relevance: -1}}
);
Je ne sais pas comment cela fonctionnera. Cependant, même s'il est médiocre avec MongoDB 2.4, il pourrait être radicalement différent dans 2.6/2.5, car 2.6 inclura amélioration des performances de tri par agrégation .