Jeśli używasz $near
polecenie, to musisz najpierw posortować według odległości, w przeciwnym razie pojęcie "blisko" nie ma żadnego sensu. Na kuli ziemskiej wszystko może być „blisko” danego punktu, to tylko kwestia „jak blisko”.
Masz tutaj dwie opcje:
- ogranicz wyniki
$near
- użyj
$within
polecenie
Myślę, że to, czego szukasz, to $within
polecenie
center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})
Możesz je następnie posortować według innego klucza:
db.places.find(...).sort({created:1})
Jednak polecenie inside może dostarczyć zbyt wiele wyników, więc prawdopodobnie chcesz wprowadzić pewną logikę, aby ograniczyć liczbę elementów zwracanych przez $within
.
db.places.find(...).limit(50).sort({created:1})
Prawda jest taka, że jeśli osiągniesz określony limit, wartość twojego $within
polecenie zwykle zaczyna spadać. Twój kod klienta może chcieć sprawdzić, czy osiągasz maksymalne wyniki.