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



我试图创建一个页面,列出了他们从我的距离数据库上的位置。当我通过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'})

相关内容

  • 没有找到相关文章

最新更新