2016-10-04 3 views
0

私の距離によってデータベース上の場所をリストするページを作成しようとしています。私はURLを経由して座標のセットを渡すとき、私はこのエラーを取得:geoNearを使用してURLを介してインデックスを渡したときにMongoErrorがインデックスを報告しない

{ 
    "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

どのように 'Loc'スキーマとインデックスはありますか? [地理空間インデックス](https://docs.mongodb.com/manual/applications/geospatial-indexes/#geospatial-indexes)を設定しましたか? –

答えて

0

地理空間索引の作成に関するコメントは正しいです。これを試してみてください...

db.locations.ensureIndex({coords: '2dsphere'}) 
関連する問題