이제 Azure DocumentDB를 사용하여 지리 공간적 데이터를 저장하고 쿼리할 수 있습니다. 이 향상된 기능은 공간 데이터를 관리하고 분석하는 강력한 도구를 제공하여 실시간 위치 추적, 경로 최적화 및 공간 분석과 같은 광범위한 애플리케이션을 지원합니다.
이제 지원되는 지리 공간적 명령 및 연산자의 간략한 개요는 다음과 같습니다.
지리 공간적 쿼리 연산자
$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
지리 공간적 쿼리에 대한 지점으로부터의 최대 거리를 지정합니다. 연산자와 $nearSphere 함께 $near 사용됩니다. 예를 들어 지정된 지점에서 2km 이내의 모든 위치를 찾습니다.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
지리 공간적 쿼리에 대한 지점으로부터의 최소 거리를 지정합니다. 연산자와 $nearSphere 함께 $near 사용됩니다.
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 다각형으로 쿼리하는 것은 지원되지 않습니다. 이러한 경우 Azure DocumentDB는 다음 오류 메시지를 반환합니다.
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,
$near및$nearSphere스테이지에는$geoNear엄격한 인덱스 요구 사항이 없으므로 인덱스가 누락된 경우 이러한 쿼리가 실패하지 않습니다.
관련 콘텐츠
- MongoDB와의 MQL(MongoDB 쿼리 언어) 호환성에 대해 자세히 알아보세요.
- MongoDB에서 Azure DocumentDB로 마이그레이션하기 위한 옵션을 검토합니다.