Har du testat att använda aggregeringsramverket?
En pipeline i två steg kan fungera:
- en $match steg som använder din befintliga $geoWithin-fråga.
- en $sort steg som sorterar efter
relevance: -1
Här är ett exempel på hur det kan se ut:
db.foo.aggregate(
{$match: { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }},
{$sort: {relevance: -1}}
);
Jag är inte säker på hur det kommer att fungera. Men även om det är dåligt med MongoDB 2.4, kan det vara dramatiskt annorlunda i 2.6/2.5, eftersom 2.6 kommer att innehålla förbättrad aggregeringssorteringsprestanda .