Mongoose从纬度 - 经度坐标中抓取一定距离的文档

时间:2016-03-29 13:06:06

标签: node.js mongodb mongoose odm

我正在尝试在Mongoose中加载一个文件,如果它让我们说距当前纬度/经度坐标10公里。

所以,让我说我有这个对象:

{
    lat: -33.9493992,
    lon: 151.1114885
}

在我的Mongoose数据库中,我有一个集合,此集合中的每个文档也都有save lat-lon键。我怎样才能从给定坐标中获取一定距离的条目?

例如,我想只抓取距离上面坐标10公里的文件。

我将不胜感激。

修改 我的代码:

初始化模型:

var schema = new mongoose.Schema({
title: String,
    title: String,
    coordinates: {
        type: [ Number ],
        default: [0, 0],
        index: '2dsphere'
    }
});

global.models.Point = mongoose.model('Point', schema);

试图在模型中找到的代码:     router.route(' /点/:纬度/:LON')         .get(function(req,res){             console.log(' lat:' + req.params.lat +' lon:' + req.params.lon);

        global.models.Point.find({
            coordinates: {
                $near: {
                    $maxDistance: 100 / 111.12,
                    $geometry: {
                        type: 'Point',
                        coordinates: [req.params.lon, req.params.lat]
                    }
                }
            }
        }, function (err, res) {
            if (err) {
                return console.log(err);
            }
            console.log(res);
        });
    }); 

对象存储在数据库集合中:

{ 
    "_id" : ObjectId("56ea103eefedec96b6d4b203"), 
    "title" : "Some title", 
    "coordinates" : [
        5.2260167, 
        52.3500607
    ]
}

1 个答案:

答案 0 :(得分:0)

在您的架构中,您需要将字段定义如下:

location: { 
  type: [ Number ], 
  default: [ 0, 0 ], 
  index: '2dsphere' 
}

然后你就可以对它进行搜索操作:

Model.find({
  location: {
    $near: {
      $maxDistance: 100/111.12, // 100km
      $geometry: { 
        type: "Point", 
        coordinates: [151.1114885, -33.9493992] // [lon, lat]    
      }
    }
  }
}).exec(callback);

$maxDistance的说明:

1° latitude = 69.047 miles = 111.12 kilometers