Эта глава знакомит с одной из функций геопоиска в 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 // Максимальное расстояние
          }
       }
   }
)