Геопространственные запросы MongoDB: получение данных на основе широты и долготы

Лучший запрос для получения данных на основе широты и долготы в MongoDB — это использование геопространственных индексов и операторов, предоставляемых MongoDB. Вот несколько методов с примерами кода:

  1. Запрос «Рядом».
    Этот запрос возвращает документы рядом с определенным местоположением, отсортированные по их близости к заданным координатам.
db.collection.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [longitude, latitude]
      },
      $maxDistance: maxDistanceInMeters
    }
  }
});
  1. Внутри запроса.
    Этот запрос возвращает документы, попадающие в заданный радиус или форму.
db.collection.find({
  location: {
    $geoWithin: {
      $centerSphere: [[longitude, latitude], radiusInRadians]
    }
  }
});
  1. Запрос «Пересечения».
    Этот запрос возвращает документы, пересекающиеся по заданной форме.
db.collection.find({
  location: {
    $geoIntersects: {
      $geometry: {
        type: "Polygon",
        coordinates: [[
          [longitude1, latitude1],
          [longitude2, latitude2],
          [longitude3, latitude3],
          [longitude4, latitude4],
          [longitude1, latitude1]
        ]]
      }
    }
  }
});
  1. Запрос агрегирования.
    Этот запрос позволяет выполнять более сложные геопространственные операции с использованием платформы агрегирования.
db.collection.aggregate([
  {
    $geoNear: {
      near: {
        type: "Point",
        coordinates: [longitude, latitude]
      },
      distanceField: "distance",
      maxDistance: maxDistanceInMeters,
      spherical: true
    }
  }
]);