Ten rozdział przedstawia zapytania geoprzestrzenne MongoDB, które obsługują zapytania dotyczące przecięcia i zawierania.
Przykłady zastosowań:
- Narysuj okrąg na mapie i wyszukaj dane wewnątrz tego okręgu.
Wymagane samouczki
Formaty przechowywania danych geoprzestrzennych dla MongoDB
Wymagania wstępne dotyczące zapytań opartych na odległości obejmują:
- Każdy dokument danych zawiera pole do przechowywania danych współrzędnych, na przykład: pole lokalizacji przechowuje współrzędne sklepu.
- Utwórz indeks przestrzenny 2dsphere lub 2d.
Operator $geoWithin
Często używany do wyszukiwania punktów współrzędnych zawartych w określonym zakresie geometrycznym, na przykład: podczas wyszukiwania domów poprzez rysowanie na mapie, narysuj obszar na mapie i wyszukaj domy wewnątrz tego obszaru.
Format składni:
{
<pole lokalizacji>: { // Pole zapytania
$geoWithin: {
$geometry: {
type: , // Obsługuje tylko Polygon lub MultiPolygon.
coordinates: [ <współrzędne> ] // Zbiór punktów współrzędnych geometrycznych
}
}
}
}
Przykład:
db.places.find(
{
loc: { // Pole loc przechowuje dane współrzędnych
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Znajdź dane wewnątrz tego obszaru geometrycznego
}
}
}
}
)
Zapytaj o dane dokumentu w określonym obszarze geometrycznym w kolekcji places.
Operator $geoIntersects
Różnica między $geoWithin polega na tym, że $geoIntersects służy do określenia, czy istnieje przecięcie między dwoma geometriami.
Format:
{
<pole lokalizacji>: { // Pole przechowujące punkty współrzędnych geometrycznych
$geoIntersects: {
$geometry: {
type: "<typ obiektu geojson>" , // Typ geometryczny
coordinates: [ <współrzędne> ] // Zbiór punktów współrzędnych geometrycznych, zapytaj o dane z przecięciem z tą geometrią
}
}
}
}
Przykład:
db.places.find(
{
loc: { // Pole loc przechowuje dane obszaru, który jest kształtem geometrycznym
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Zapytaj o dane z przecięciem z tą geometrią
]
}
}
}
}
)