Node.js 猫鼬从经纬度坐标上抓取一定距离的文档

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

我试图在Mongoose中加载一个文档,如果它距离当前的lat/lon坐标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('/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);