我试图创建一个页面,按照与我的距离列出数据库中的位置。当我通过URL传递一组坐标时,我收到此错误:
{
"name": "MongoError",
"message": "no geo indices for geoNear",
"waitedMS": 0,
"ok": 0,
"errmsg": "no geo indices for geoNear"
}
输入:http://localhost:3000/api/locations?lng=-133.482946&lat=45.263776
我的代码如下:
module.exports.locationsListByDistance = function (req, res) {
var lng = parseFloat(req.query.lng);
var lat = parseFloat(req.query.lat);
var point = {
type: "Point",
coordinates: [lng, lat]
};
var geoOptions = {
spherical: true,
maxDistance: 20000,
num: 10
};
if (!lng || !lat) {
sendJsonResponse(res, 404, {
"message": "lng and lat query parameters are required"
});
return;
}
Loc.geoNear(point, geoOptions, function(err, results, stats){
var locations= [];
if (err) {
sendJsonResponse(res, 404, err);
} else {
results.forEach(function(doc) {
locations.push({
distance: doc.dis,
name: doc.obj.name,
address: doc.obj.address,
rating: doc.obj.rating,
facilities: doc.obj.facilities,
_id: doc.obj._id
});
});
sendJsonResponse(res, 200, locations);
}
});
};
每次都会触发if语句错误,并显示上面列出的错误。 如果我控制台记录点对象,它会在其范围内正确显示。
有没有人有过这个错误的经验?有什么建议? 几个小时的谷歌搜索已经提出了可能的mongo客户端修复,但由于我没有直接使用mongo客户端,它将无法作为解决方案。
答案 0 :(得分:1)
关于确保您拥有地理空间索引的评论是正确的。试试这个......
db.locations.ensureIndex({coords: '2dsphere'})