Node.js и Mongoose возвращают 2D-запрос
У меня есть простая проблема, я пытаюсь вернуть документ MongoDB после запроса на моем сервере Node.js:
var coords = [];
coords[0] = req.query.valArray.lng; // client latitude
coords[1] = req.query.valArray.lat; // client longitude
var distanceInKM = req.query.valArray.rangeKM; // the range
//the query that its results i want to return by res.send()
db.Jobs.find( {
$and: [ { {exp: req.query.valArray.exp} },
{ field: req.query.valArray.field }
] } )
Мои вопросы:
- Как вернуть документ в соответствии с
req.query
(exp = query.exp) и остальные параметрыres.send()
функция. - Как искать по координатам (координатам) и дальности от текущего местоположения
(lng , lat)
другими словами, создайте радиус из координат, который все соответствующие задания вернут как json.
1 ответ
Решение
Вам не нужно изобретать велосипед. Ваш подход не будет учитывать кривизну Земли, поэтому ваши расчеты будут неточными, если расстояния большие.
Я бы посоветовал использовать геопространственные индексы, уже поддерживаемые MongoDB
,
ОБНОВИТЬ
Например, вы можете использовать $centerSphere
оператор, который возвращает документы в радиусе от центральной точки (пример взят оттуда).
{
<location field>: {
$geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] }
}
}
Для этого вам нужно сохранить ваши координаты в формате GeoJSON (вам нужно добавить всего несколько мета-полей к вашим html5-координатам).