MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordinare i risultati di MongoDB GeoNear in base a qualcosa di diverso dalla distanza?

Se stai usando $near comando quindi devi prima ordinare per distanza o il concetto di "vicino" non ha davvero alcun senso. Su un globo tutto può essere "vicino" a un dato punto, è solo una questione di "quanto vicino".

Hai due opzioni qui:

  1. limita i risultati di $near
  2. usa il $within comando

Penso che quello che stai cercando sia il $within comando

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

Puoi quindi ordinarli in base a un'altra chiave:

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

Tuttavia, il comando inside potrebbe fornire troppi risultati, quindi probabilmente vorrai inserire un po' di logica per limitare il numero di elementi restituiti da $within .

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

La verità è che, se raggiungi un limite specifico, il valore del tuo $within il comando generalmente inizia a cadere. Il tuo codice cliente potrebbe voler verificare se stai raggiungendo il massimo dei risultati.