MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trier les résultats de MongoDB GeoNear par autre chose que la distance ?

Si vous utilisez le $near commande alors vous devez d'abord trier par distance ou le concept de "proche" n'a pas vraiment de sens. Sur un globe, tout peut être "proche" d'un point donné, c'est juste une question de "à quelle distance".

Vous avez deux options ici :

  1. limiter les résultats de $near
  2. utiliser le $within commande

Je pense que ce que vous cherchez est le $within commande

center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

Vous pouvez ensuite les trier selon une autre clé :

db.places.find(...).sort({created:1})

Cependant, la commande within peut fournir trop de résultats, vous voudrez donc probablement mettre un peu de logique pour limiter le nombre d'éléments renvoyés par $within .

db.places.find(...).limit(50).sort({created:1})

La vérité est que si vous atteignez une limite spécifique, la valeur de votre $within commande commence généralement à tomber. Votre code client voudra peut-être vérifier si vous atteignez le maximum de résultats.