我疯狂地使用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]
}
}
答案 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;
});