Эта глава знакомит с одной из функций геопоиска в MongoDB, с помощью которой можно осуществлять запросы к данным документов на основе расстояния.
Сценарии применения: поиск ближайших магазинов и поиск людей поблизости.
Обязательное руководство
Хранение геопространственных данных в MongoDB
Для запросов данных на основе расстояния необходимы следующие условия:
- Каждый документ содержит поле, в котором хранятся координаты, например: поле
location
хранит координаты магазина. - Создание 2dsphere- или 2d-пространственного индекса.
Оператор $near
MongoDB использует оператор $near для запросов к данным документов на основе расстояния.
Формат:
{
<поле местоположения>: { // Поле, которое хранит координатные данные
$near: {
$geometry: { // Установите опорные координаты для сравнения
type: "Point" ,
coordinates: [ долгота , широта ]
},
$maxDistance: максимальное расстояние, в метрах,
$minDistance: минимальное расстояние, в метрах
}
}
}
Примечание: Данные, возвращаемые запросом $near, отсортированы от ближайших к самым удалённым.
Пример
Предположим, что в коллекции shop
хранятся данные о магазинах, где поле location
содержит координаты каждого магазина. Следующий запрос находит ближайший магазин ко мне (минимальное расстояние 1000 метров, максимальное расстояние 5000 метров).
db.shop.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // Мои координаты
$minDistance: 1000, // Минимальное расстояние
$maxDistance: 5000 // Максимальное расстояние
}
}
}
)