Node.js和Mongoose返回2D查询

Node.js and Mongoose return 2D query

本文关键字:2D 查询 返回 Mongoose js Node      更新时间:2023-09-26

我有一个简单的问题,我试图在Node.js服务器中查询后返回MongoDB文档:

var coords = [];
        coords[0] = req.query.valArray.lng; // client latitude
        coords[1] = req.query.valArray.lat; // client longitude
        var distanceInKM = req.query.valArray.rangeKM; // the range 
         //the query that its results i want to return by res.send()
        db.Jobs.find( { 
            $and: [ { {exp: req.query.valArray.exp} }, 
                      { field: req.query.valArray.field } 
                  ] } )

我的问题是:

  1. 如何通过res.send()函数根据req.query(exp=query.exp)和其余参数返回文档
  2. 如何根据坐标(coords)和当前位置(lng , lat)的范围进行搜索,换句话说,从坐标创建一个半径,所有匹配的作业都将以json形式返回

您不需要重新发明轮子。你的方法不会考虑地球的曲率,所以如果距离很大,你的计算就会不准确。

我建议使用MongoDB已经支持的地理空间索引。

更新

例如,您可以使用$centerSphere运算符,该运算符返回中心点半径范围内的文档(示例取自该点)。

{
  <location field>: {
     $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] }
     }
}

要做到这一点,您需要以GeoJSON格式存储坐标(只需要在html5坐标中添加几个元字段)。