Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY:
MongoDB vCore
Dane geoprzestrzenne można teraz przechowywać i wykonywać zapytania przy użyciu opartej na rdzeniach wirtualnych usługi Azure Cosmos DB dla bazy danych MongoDB. To ulepszenie zapewnia zaawansowane narzędzia do zarządzania danymi przestrzennymi i analizowania ich, umożliwiając szeroką gamę aplikacji, takich jak śledzenie lokalizacji w czasie rzeczywistym, optymalizacja tras i analiza przestrzenna.
Oto krótkie omówienie poleceń geoprzestrzennych i operatorów obsługiwanych teraz:
Operatory zapytań geoprzestrzennych
$geoIntersects
Wybiera dokumenty, w których określona geometria przecina geometrię dokumentów. Przydatne do znajdowania dokumentów, które współdzielą jakąkolwiek część przestrzeni z daną geometrią.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
Wybiera dokumenty z danymi geoprzestrzennymi, które istnieją całkowicie w określonym kształcie. Ten operator służy do znajdowania dokumentów w zdefiniowanym obszarze.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
Definiuje prostokątny obszar przy użyciu dwóch par współrzędnych (w lewym dolnym i prawym górnym rogu). Używany z operatorem $geoWithin
do znajdowania dokumentów w tym prostokącie. Na przykład znalezienie wszystkich lokalizacji w regionie prostokątnym na mapie.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
Definiuje okrągły obszar przy użyciu punktu środkowego i promienia w radianach. Używany z operatorem $geoWithin
aby znaleźć dokumenty w tym okręgu.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
Podobnie jak $center
, ale definiuje obszar kulisty przy użyciu punktu środkowego i promienia w radianach. Przydatne w obliczeniach geometrii sfericznej.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
Określa obiekt GeoJSON w celu zdefiniowania geometrii. Używany z operatorami geoprzestrzennymi do wykonywania zapytań na podstawie złożonych kształtów.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
Określa maksymalną odległość od punktu zapytania geoprzestrzennego. Używane z operatorami $near
i $nearSphere
. Na przykład znalezienie wszystkich lokalizacji w ciągu 2 km od danego punktu.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
Określa minimalną odległość od punktu zapytania geoprzestrzennego. Używane z operatorami $near
i $nearSphere
.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
Definiuje wielokąt przy użyciu tablicy par współrzędnych. Używany z operatorem $geoWithin
do znajdowania dokumentów w tym wielokącie.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
Znajduje dokumenty, które znajdują się w pobliżu określonego punktu. Zwraca dokumenty posortowane według odległości od punktu. Na przykład znalezienie najbliższych restauracji w lokalizacji użytkownika.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
Podobnie jak $near
, ale wykonuje obliczenia na powierzchni kulistej. Przydatne do dokładniejszego obliczania odległości na powierzchni Ziemi.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
Etap agregacji geoprzestrzennych
$geoNear
Wykonuje zapytanie geoprzestrzenne w celu zwrócenia dokumentów posortowanych według odległości od określonego punktu. Może zawierać dodatkowe kryteria zapytania i informacje o odległości zwracanej.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
Zagadnienia i nieobsługiwane możliwości
Obecnie wykonywanie zapytań za pomocą wielokąta GeoJSON z pojedynczym pierścieniem, którego obszar przekracza jedną półkulę, nie jest obsługiwany. W takich przypadkach rdzeń wirtualny Mongo zwraca następujący komunikat o błędzie:
Error: Custom CRS for big polygon is not supported yet.
Indeks złożony używający zwykłego indeksu i indeksu geoprzestrzennego nie jest dozwolony. Na przykład:
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yet
Wielokąty z otworami nie są obecnie obsługiwane do użytku z zapytaniami $geoWithin. Mimo że wstawianie wielokąta z otworami nie jest ograniczone, ostatecznie kończy się niepowodzeniem z następującym komunikatem o błędzie:
Error: $geoWithin currently doesn't support polygons with holes
Pole klucza jest zawsze niezbędne na etapie przetwarzania danych przez agregację $geoNear. Jeśli brakuje pola klucza, wystąpi następujący błąd:
Error: $geoNear requires a 'key' option as a String
Etapy
$geoNear
,$near
i$nearSphere
nie mają rygorystycznych wymagań dotyczących indeksu, więc te zapytania nie kończą się niepowodzeniem, jeśli brakuje indeksu.
Powiązana zawartość
- Przeczytaj więcej na temat zgodności funkcji z bazą danych MongoDB.
- Przejrzyj opcje migracji z bazy danych MongoDB do usługi Azure Cosmos DB dla rdzeni wirtualnych bazy danych MongoDB.