지리 공간적 쿼리 지원
적용 대상: MongoDB vCore
이제 vCore 기반 Azure Cosmos DB for MongoDB를 사용하여 공간 데이터를 저장하고 쿼리할 수 있습니다. 이러한 향상된 기능은 공간 데이터를 관리하고 분석하는 강력한 도구를 제공하여 실시간 위치 추적, 경로 최적화, 공간 분석과 같은 광범위한 애플리케이션을 구현할 수 있습니다.
이제 지원되는 지리 공간적 명령 및 연산자에 대한 간략한 개요는 다음과 같습니다.
지리 공간적 쿼리 연산자
$geoIntersects
지정된 기하 구조가 문서의 기하 구조와 교차하는 문서를 선택합니다. 지정된 기하 구조와 공간의 일부를 공유하는 문서를 찾는 데 유용합니다.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
지정된 모양 내에 완전히 존재하는 지리 공간적 데이터가 있는 문서를 선택합니다. 이 연산자는 정의된 영역 내에서 문서를 찾는 데 사용됩니다.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
두 개의 좌표 쌍(왼쪽 하단과 오른쪽 상단 모서리)을 사용하여 직사각형 영역을 정의합니다. $geoWithin
연산자와 함께 사용하여 이 사각형 내에서 문서를 찾습니다. 예를 들어, 맵의 직사각형 영역 내에 있는 모든 위치를 찾는 것입니다.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
중심점과 반지름(라디안)을 사용하여 원형 영역을 정의합니다. $geoWithin
연산자와 함께 사용하여 이 원 안에서 문서를 찾습니다.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
$center
와 유사하지만 중심점과 반지름(라디안)을 사용하여 구형 영역을 정의합니다. 구형 기하 계산에 유용합니다.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
GeoJSON 개체를 지정하여 기하 도형을 정의합니다. 복잡한 모양에 기반한 쿼리를 수행하기 위해 지리 공간적 연산자와 함께 사용됩니다.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
지리 공간적 쿼리에 대한 지점으로부터의 최대 거리를 지정합니다. $near
및 $nearSphere
연산자와 함께 사용됩니다. 예를 들어, 지정된 지점으로부터 2km 이내에 있는 모든 위치를 찾는 것입니다.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
지리 공간적 쿼리에 대한 지점으로부터의 최소 거리를 지정합니다. $near
및 $nearSphere
연산자와 함께 사용됩니다.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
좌표 쌍의 배열을 사용하여 다각형을 정의합니다. $geoWithin
연산자와 함께 사용하여 이 다각형 내에서 문서를 찾습니다.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
지정된 지점 근처에 있는 문서를 찾습니다. 해당 지점으로부터의 거리를 기준으로 정렬된 문서를 반환합니다. 예를 들어, 사용자의 위치에서 가장 가까운 레스토랑을 찾는 것입니다.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
$near
와 유사하지만 구면에서 계산을 수행합니다. 지구 표면에서 더 정확한 거리를 계산하는 데 유용합니다.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
지리 공간적 집계 단계
$geoNear
지정된 지점으로부터의 거리를 기준으로 정렬된 문서를 반환하기 위해 지리 공간적 쿼리를 수행합니다. 추가 쿼리 기준과 반환 거리 정보를 포함할 수 있습니다.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
고려 사항 및 지원되지 않는 기능
현재, 면적이 단일 반구를 초과하는 단일 링 GeoJSON 다각형에 대한 쿼리는 지원되지 않습니다. 이러한 경우 Mongo vCore는 다음과 같은 오류 메시지를 반환합니다.
Error: Custom CRS for big polygon is not supported yet.
일반 인덱스와 지리 공간적 인덱스를 사용하는 복합 인덱스는 허용되지 않습니다. 예시:
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yet
구멍이 있는 다각형은 현재 $geoWithin 쿼리와 함께 사용할 수 없습니다. 구멍이 있는 다각형을 삽입하는 것은 제한이 없지만 결국 다음과 같은 오류 메시지와 함께 실패합니다.
Error: $geoWithin currently doesn't support polygons with holes
$geoNear 집계 단계에서는 키 필드가 항상 필요합니다. 키 필드가 누락된 경우 다음 오류가 발생합니다.
Error: $geoNear requires a 'key' option as a String
$geoNear
,$near
,$nearSphere
단계에는 엄격한 인덱스 요구 사항이 없으므로 인덱스가 누락되어도 이러한 쿼리는 실패하지 않습니다.
관련 콘텐츠
- MongoDB와의 기능 호환성에 대해 자세히 알아보세요.
- MongoDB에서 Azure Cosmos DB for MongoDB vCore로 마이그레이션하기 위한 옵션 검토