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 } 
                  ] } )

Мои вопросы:

  1. Как вернуть документ в соответствии с req.query (exp = query.exp) и остальные параметры res.send() функция.
  2. Как искать по координатам (координатам) и дальности от текущего местоположения (lng , lat)другими словами, создайте радиус из координат, который все соответствующие задания вернут как json.

1 ответ

Решение

Вам не нужно изобретать велосипед. Ваш подход не будет учитывать кривизну Земли, поэтому ваши расчеты будут неточными, если расстояния большие.

Я бы посоветовал использовать геопространственные индексы, уже поддерживаемые MongoDB,

ОБНОВИТЬ

Например, вы можете использовать $centerSphere оператор, который возвращает документы в радиусе от центральной точки (пример взят оттуда).

{
  <location field>: {
     $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] }
     }
}

Для этого вам нужно сохранить ваши координаты в формате GeoJSON (вам нужно добавить всего несколько мета-полей к вашим html5-координатам).

Другие вопросы по тегам