使用geoNear通过URL传递索引时,MongoError报告没有索引

时间:2016-10-04 00:30:38

标签: mongodb mongoose mean-stack

我试图创建一个页面,按照与我的距离列出数据库中的位置。当我通过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客户端,它将无法作为解决方案。

1 个答案:

答案 0 :(得分:1)

关于确保您拥有地理空间索引的评论是正确的。试试这个......

db.locations.ensureIndex({coords: '2dsphere'})