Używaj zapytań geoprzestrzennych w operacjach zgodnych z MongoDB, aby wyszukiwać dokumenty znajdujące się w określonym zakresie od konkretnej długości i szerokości geograficznej.
Zanim zaczniesz
Upewnij się, że masz dostęp do istniejącej bazy danych operacji zgodnej z MongoDB lub utwórz bazę danych i połącz się z nią.
Sprawdź, czy masz co najmniej 1 indeks 2dsphere, lub utwórz indeks 2dsphere.
Obiekty GeoJSON
Aby uruchomić zapytanie geoprzestrzenne dotyczące pól w kolekcji, pola, których dotyczy zapytanie, muszą być obiektami GeoJSON lub punktami geograficznymi.
Uruchamianie zapytania geoprzestrzennego
Zapytanie geoprzestrzenne możesz wykonać za pomocą operatora $near, który oblicza odległość punktu geograficznego od punktów geograficznych w dokumentach. Dokumenty są następnie sortowane w wynikach zapytania od najbliższego do najdalszego. Możesz też zastąpić tę kolejność sortowania, definiując w zapytaniu sortowanie dodatkowe inne niż $natural. Operator $near musi występować w polu dokumentu w filtrze zapytania i musi zawierać pole $geometry GeoJSON.
W poniższym przykładzie operator $near służy do obliczania odległości między punktem geograficznym (-122.084, 37.4221) a punktami geograficznymi znajdującymi się w polu location wszystkich dokumentów w myCollection.. Dokumenty są zwracane i sortowane według odległości między dwoma punktami – od najbliższego do najdalszego.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
Możesz też użyć opcjonalnych pól $maxDistance i $minDistance, aby określić odległość w metrach od punktu zapytania.
Poniższy przykład pokazuje zapytanie, w którym zwrócone dokumenty muszą znajdować się w odległości co najmniej 500 m i co najwyżej 2000 m od punktu (-122.084, 37.4221):
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
Jeśli indeks jest podzielony na partycje, możesz filtrować na podstawie partycji, uwzględniając ją w zapytaniu w filtrze równości „and”.
Jeśli na przykład masz partycję region i chcesz filtrować wyniki zapytania według regionu midwest, możesz wykonać te czynności:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
Wartość partycji musi być ciągiem znaków. Filtr partycji musi być połączony z zapytaniem za pomocą operatora $and.
Ograniczenia
- Operatorów
$neari$textnie można używać w tym samym zapytaniu. - Funkcji
$nearnie można zagnieżdżać w instrukcji$orz wieloma klauzulami, chyba że$nearjest jedynym wyrażeniem w klauzuli$or. - W zapytaniu nie można używać operatora
$nearz operatorami$notani$nor. $nearnie jest obsługiwany w przypadku zapytań o agregację.