Эта глава представляет запросы MongoDB для геопространственных данных, которые поддерживают геометрические запросы на пересечение и содержание.
Сценарии применения:
- Нарисуйте круг на карте и выполните запрос данных внутри круга.
Руководство по предварительным требованиям
Форматы хранения геопространственных данных для MongoDB
Для запроса данных на основе расстояния требуется следующее:
- Каждый документ данных содержит поле для хранения координатных данных, например: поле location хранит координаты магазина.
- Создайте 2dsphere или 2d пространственный индекс.
Оператор $geoWithin
Он обычно используется для запроса координатных точек, содержащихся в указанном геометрическом диапазоне, например: при поиске домов по рисунку на карте нарисуйте область на карте и запросите дома в этой области.
Синтаксический формат:
{
<поле местоположения>: { // Поле запроса
$geoWithin: {
$geometry: {
type: , // Поддерживает только Polygon или MultiPolygon.
coordinates: [ <координаты> ] // Коллекция геометрических координатных точек
}
}
}
}
Пример:
db.places.find(
{
loc: { // Поле loc хранит координатные данные
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Найти данные внутри этой геометрической области
}
}
}
}
)
Запрос данных документа внутри указанной геометрической области в коллекции мест.
Оператор $geoIntersects
Отличие от $geoWithin заключается в том, что $geoIntersects используется для определения наличия пересечения между двумя геометриями.
Формат:
{
<поле местоположения>: { // Поле для хранения геометрических координатных точек
$geoIntersects: {
$geometry: {
type: "<тип объекта геоjson>" , // Геометрический тип
coordinates: [ <координаты> ] // Коллекция геометрических координатных точек, запрос данных с пересечением с этой геометрией
}
}
}
}
Пример:
db.places.find(
{
loc: { // Поле loc хранит данные области, которая является геометрической формой
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Запрос данных с пересечением с этой геометрией
]
}
}
}
}
)