我试图创建一个页面,列出了他们从我的距离数据库上的位置。当我通过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客户端,它不会作为一个解决方案。
关于确保您拥有地理空间索引的评论是正确的。试试这个…
db.locations.ensureIndex({coords: '2dsphere'})