使用mongodb geoNear或

时间:2016-03-18 10:56:00

标签: mongodb mongodb-query

我疯狂地使用MongoDB从特定点返回最近的场地。这是我第一次参与其中,所以我对这种做法完全陌生。

我在开始时做的是创建我的Venue集合的2DIndex。

现在我试图在距离特定点500米范围内设置场地,代码如下:

    Venue.find({ location:
        {
            $near: [ 52.3835443 , 4.8353073 ],
            $maxDistance: 0.5 / 6371
        }
    }, function (err, venues) {
        return venues;
    });

不幸的是它会返回所有文件。

Venue模型的位置字段如下:

"location": {
  "type": {
    "type": "string"
  },
  "coordinates": [{ "type": "Number" }]
}

我所有的场地都是这样的:

{
 "name": "name",
 "address": "address",
 "location": {
  "type": "Point",
  "coordinates": [50.1981668, 7.9943994999]
 }
}

我也尝试使用$geoNear,但我总是收到所有文件,而不仅仅是500米距离的文件。

编辑:

Mongo版本是3.2;

指数:

{
    "v": 1,
    "key": {
        "location": "2dsphere"
    },
    "name": "location_2dsphere",
    "ns": "mydb.Venue",
    "2dsphereIndexVersion": 2
}

文件如上所述:

{
 "name": "A name",
 "address": "An address",
 "location": {
  "type": "Point",
  "coordinates": [50.1981668, 7.9943994999]
 }
}

1 个答案:

答案 0 :(得分:0)

$ maxDistance运算符将地理空间$ near或$ nearSphere查询的结果约束到指定距离。最大距离的测量单位由使用的坐标系确定。对于GeoJSON点对象,请以米为单位指定距离,而不是弧度。 ref here

当我执行此查询时,我得到了:

  

planner返回错误:无法找到$ geoNear查询的索引

所以将** $ geometry **添加到查询正文中

Venue.find({ location:
      {
    $near: {
       $geometry : {
           type : "Point" ,
           coordinates : [ 52.3835443 , 4.8353073 ]},

       $maxDistance : 500}}}
    }, function (err, venues) {
        return venues;
    });