我正试图在Mongoose中加载一个文档,假设它距离当前lat/lon坐标10公里。
假设我有一个对象:
{
lat: -33.9493992,
lon: 151.1114885
}
在我的Mongoose数据库中,我有一个集合,这个集合中的每个文档都有保存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('/points/:lat/:lon').get(函数(req,res){console.log('lat:'+Rreq.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
]
}
在您的模式中,您需要有一个定义如下的字段:
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