Задать вопрос

Как сделать geoNear запрос через модель mongoose?

Изучаю стек MEAN и не соображу в чем загвоздка. Я делаю запрос по книге запрос, но мне возвращается 0 результатов. Я делаю запрос, например: localhost:3000/api/locations?lng=-0.9690884&lat=51... но мне ничего не возвращает. атрибуты типа maxDistance принимают в радианах? Перевод данных в радианы верен? Помогите разобраться. Возвращает только в том случае если я указываю полную те координаты которые у документа есть. Ниже приведу код.

API controller:
var Loc = mongoose.model('Location');

var theEarth = (function(){
    var earthRadius = 6371; // киллометров или 3959 миль

    var getDistanceFromRads = function(rads){
        return parseFloat(rads * earthRadius);
    }

    var getRadsFromDistance = function(distance){
        return parseFloat(distance / earthRadius);
    }

    return {
        getDistanceFromRads : getDistanceFromRads,
        getRadsFromDistance : getRadsFromDistance
    };
})()

module.exports.locationsListByDistance = function(req, res){
    if(req.query.lng || req.query.lat || req.quert.maxDistance){
        var lng = parseFloat(req.query.lng);
        var lat = parseFloat(req.query.lat);
        var maxDistance = parseInt(req.query.maxDistance);
        var geoOptions = {
            spherical: true,
            maxDistance: theEarth.getRadsFromDistance(maxDistance),
            num: 10,
        };
        var point = {
            type: "Point",
            coordinates: [lng, lat]
        }
        Loc.geoNear(point, geoOptions, function(err, result, stats){
            if(err){
                sendJsonResponse(res,404,err);
                return;
            }else{
                console.log(geoOptions);
                var locations = [];
                result.forEach(function(doc){
                    locations.push({
                        distance: theEarth.getDistanceFromRads(doc.dis),
                        name: doc.obj.name,
                        address: doc.obj.address,
                        rating: doc.obj.rating,
                        facilities: doc.obj.facilities,
                        _id: doc.obj._id
                    });
                });
                sendJsonResponse(res,200,locations);
            }
        });
    }else{
        sendJsonResponse(res,404,{'message':'lng and lat is required'});
    }
};


Код контроллера сервера:
var renderHomepage = function(req, res, responseBody){
  console.log(responseBody);
  res.render('locations-list' ,{
    title: 'Home',
    pageHeader: {
      title: 'Lock8r',
      strapline: 'Find places to work with wifi near you!'
    },
    locations: responseBody,
    sidebar: 'Lock8r helps you find places to work when out and about.'
  });
}

/* GET 'home' page */
const homelist = function(req, res){
  var requestOptions, path;
  path = '/api/locations';
  requestOptions = {
    url: apiOptions.server + path,
    method: "GET",
    json: {},
    qs: {
      lng: -0.9690885,
      lat: 51.455041,
      maxDistance: 1
    }
  }
  request(
    requestOptions,
    function(err, response, body){
      var i, data;
      data = body;
      for(i=0; i < data.length; i++){
        data[i].distance = _formatDistance(data[i].distance);
      }
      renderHomepage(req, res, data);
    }
  );
};


И на всякий случай из базы данных скриншот:
e2c6a6b2ed613620c19098e1b1e1e633.png
Все 3 документа имеет одни и те же координаты.
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы