Комплексное руководство по созданию и поиску геолокаций в Mongoose

В этом руководстве мы рассмотрим, как работать с геолокациями в Mongoose, библиотеке моделирования объектных данных (ODM) для MongoDB в Node.js. Мы рассмотрим различные методы, позволяющие создавать и находить геолокации с помощью Mongoose, а также примеры кода для каждого метода.

  1. Сохранение геолокаций в Mongoose:
    Чтобы хранить геолокации в Mongoose, мы можем использовать встроенный тип Schema.Types.Point, который представляет собой 2D-координату. Вот пример схемы, включающей поле геолокации:
const mongoose = require('mongoose');
const locationSchema = new mongoose.Schema({
  name: String,
  location: {
    type: mongoose.Schema.Types.Point,
    coordinates: [Number], // [longitude, latitude]
  },
});
const Location = mongoose.model('Location', locationSchema);
  1. Создание документа с геолокацией:
    Чтобы создать документ с геолокацией, вы можете просто присвоить координаты полю location. Вот пример:
const newLocation = new Location({
  name: 'Example Location',
  location: {
    type: 'Point',
    coordinates: [-74.006, 40.7128], // New York City coordinates
  },
});
newLocation.save((error, savedLocation) => {
  if (error) {
    console.error(error);
  } else {
    console.log('Location saved:', savedLocation);
  }
});
  1. Поиск документов рядом с географическим местоположением.
    Чтобы найти документы рядом с определенным географическим местоположением, вы можете использовать оператор $nearв Mongoose. Вот пример:
Location.find({
  location: {
    $near: {
      $geometry: {
        type: 'Point',
        coordinates: [-74.006, 40.7128], // New York City coordinates
      },
      $maxDistance: 5000, // Maximum distance in meters
    },
  },
})
  .exec()
  .then((locations) => {
    console.log('Nearby locations:', locations);
  })
  .catch((error) => {
    console.error(error);
  });
  1. Вычисление расстояния между геолокациями.
    Вы можете рассчитать расстояние между двумя геолокациями, используя оператор агрегирования $geoNearв Mongoose. Вот пример:
Location.aggregate([
  {
    $geoNear: {
      near: {
        type: 'Point',
        coordinates: [-74.006, 40.7128], // New York City coordinates
      },
      distanceField: 'distance',
      spherical: true,
      maxDistance: 5000, // Maximum distance in meters
    },
  },
])
  .exec()
  .then((locations) => {
    console.log('Locations within 5km:', locations);
  })
  .catch((error) => {
    console.error(error);
  });

В этом руководстве мы рассмотрели несколько методов создания и поиска геолокаций в Mongoose. Мы рассмотрели, как хранить геолокации в схеме, создавать документы с геолокациями, находить близлежащие локации и рассчитывать расстояния между геолокациями. Используя эти методы, вы можете создавать мощные приложения на основе геолокации с помощью Mongoose и MongoDB.

Не забудьте настроить экземпляр MongoDB для поддержки геопространственных запросов и убедиться, что ваша версия Mongoose совместима с функциями, упомянутыми в этом руководстве.