Мангуста геопространственный поиск: расстояние не работает

Я играл с мангустами и геопространственным поиском, и после того, как я прочитал уроки и прочел что-то здесь, я все еще не мог разобраться с этой проблемой.

Моя схема:

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

Надеюсь, это кому-нибудь поможет:)

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