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 :
- limiter les résultats de
$near - utiliser le
$withincommande
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.