Мангуста геопространственный поиск: расстояние не работает
Я играл с мангустами и геопространственным поиском, и после того, как я прочитал уроки и прочел что-то здесь, я все еще не мог разобраться с этой проблемой.
Моя схема:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var LocationSchema = new Schema({
name: String,
loc: {
type: [Number], // [<longitude>, <latitude>]
index: '2dsphere' // create the geospatial index
}
});
module.exports = mongoose.model('Location', LocationSchema);
Мой (POST) маршрут:
router.post('/', function(req, res) {
var db = new locationModel();
var response = {};
db.name = req.body.name;
db.loc = req.body.loc;
db.save(function(err) {
if (err) {
response = {
"error": true,
"message": "Error adding data"
};
} else {
response = {
"error": false,
"message": "Data added"
};
}
res.json(response);
});
});
Мой (ПОЛУЧИТЬ) маршрут:
router.get('/', function(req, res, next) {
var limit = req.query.limit || 10;
// get the max distance or set it to 8 kilometers
var maxDistance = req.query.distance || 8;
// we need to convert the distance to radians
// the raduis of Earth is approximately 6371 kilometers
maxDistance /= 6371;
// get coordinates [ <longitude> , <latitude> ]
var coords = [];
coords[0] = req.query.longitude;
coords[1] = req.query.latitude;
// find a location
locationModel.find({
loc: {
$near: coords,
$maxDistance: maxDistance
}
}).limit(limit).exec(function(err, locations) {
if (err) {
return res.json(500, err);
}
res.json(200, locations);
});
});
Я могу сохранять местоположения в базе данных, но всякий раз, когда я пытаюсь найти местоположение, параметр запроса расстояния не работает. Например, если я ищу место, которое находится на расстоянии 200 м от того, которое находится в базе данных, даже если я поставлю "расстояние =1 (КМ)", я не получу результаты, но если я добавлю что-то вроде 300 (км), я получу некоторое Результаты. Расстояние не совпадает вообще.
Что я делаю неправильно?
Спасибо
1 ответ
Я смог это исправить, прочитав документы:
index: '2dsphere' требует этот запрос:
$near :
{
$geometry: { type: "Point", coordinates: [ <lng>, <lat> ] },
$minDistance: <minDistance>,
$maxDistance: <maxDistance>
}
}
а не этот, который предназначен для использования в устаревшем индексе: '2d':
loc: {
$near: [<lng>, <lat>],
$maxDistance: <maxDistance>
}
Надеюсь, это кому-нибудь поможет:)