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