Node.js 猫鼬从经纬度坐标上抓取一定距离的文档
我试图在Mongoose中加载一个文档,如果它距离当前的lat/lon坐标10公里的话 假设我有一个物体:Node.js 猫鼬从经纬度坐标上抓取一定距离的文档,node.js,mongodb,mongoose,odm,Node.js,Mongodb,Mongoose,Odm,我试图在Mongoose中加载一个文档,如果它距离当前的lat/lon坐标10公里的话 假设我有一个物体: { lat: -33.9493992, lon: 151.1114885 } 在我的Mongoose数据库中,我有一个集合,集合中的每个文档都有save lat lon键。我如何才能从给定坐标中仅获取一定距离的条目 例如,我只想抓取距离上述坐标10公里的文档 我将感谢任何帮助 编辑: 我的代码: 初始化模型: var schema = new mongoose.Schem
{
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('/points/:lat/:lon')
.get(函数(请求、恢复){
console.log('lat:'+req.params.lat+'lon:'+req.params.lon)
存储在数据库集合中的对象:
{
"_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°纬度=69.047英里=111.12公里
阅读文档。您不需要单独的属性。文档将告诉您文档应该如何存储数据。嘿,谢谢您的回答。我需要使用mongoose modelSchema定义在启动模型时定义的字段吗?我这样做了,我已经完成了t“未定义”结果…我得到一个空对象,我的模式中一定有错误。我将用模式定义更新我的问题。我将非常感谢您的帮助。非常感谢Oleg。@ArielWeinberger坐标应该是一个数组字段,而不是一个对象。请再次检查我的答案嘿。实际上我忘了编辑,但我确实将其用作数组l就像你做的那样,但我仍然得到了一个空数组:(我还编辑并添加了文档,因为它存储在集合中,可能我在那里做错了什么。。。
Model.find({
location: {
$near: {
$maxDistance: 100/111.12, // 100km
$geometry: {
type: "Point",
coordinates: [151.1114885, -33.9493992] // [lon, lat]
}
}
}
}).exec(callback);