В этом руководстве мы рассмотрим, как работать с геолокациями в Mongoose, библиотеке моделирования объектных данных (ODM) для MongoDB в Node.js. Мы рассмотрим различные методы, позволяющие создавать и находить геолокации с помощью Mongoose, а также примеры кода для каждого метода.
- Сохранение геолокаций в 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);
- Создание документа с геолокацией:
Чтобы создать документ с геолокацией, вы можете просто присвоить координаты полю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);
}
});
- Поиск документов рядом с географическим местоположением.
Чтобы найти документы рядом с определенным географическим местоположением, вы можете использовать оператор$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);
});
- Вычисление расстояния между геолокациями.
Вы можете рассчитать расстояние между двумя геолокациями, используя оператор агрегирования$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 совместима с функциями, упомянутыми в этом руководстве.