2016-10-01 3 views
0

複数のObjectがマップ内のある点から離れて移動することをシミュレートするNode.jsテストがあります。その地点からの大惨事。 各オブジェクトは、ネストされた従来の2dインデックス'location.loc'を持つモデルに対応します。

私はこれが

var center={_lat:20,lng:-100}; 

var area = { 
     center: [center._lng,center._lat], 
     radius: 100,//This are supossed to be meters 
     unique: true, 
     spherical: true } 


    MyModel.where('location.loc') 
     .within() 
     .circle(area) 
     .exec(function (err, records) { 
      if (err) { 
       throw err; 
      } 
      //Log Length of records 
     }); 

そして

MyModel.find({ 
    "location.loc": { 
     $near: [center._lng,center._lat], 
     $maxDistance: 1 //This is suposed to be a mile 
    } 
    }).exec(function(err, documents) { 
     if (err) { 
      throw err; 
     } 
     //Log documents length 
    }); 

を照会に使用しているが、両方のスクリプトが、彼らはマイル離れた地点からの場合であっても、私の文書のTE全体のコレクションを返します。 同時に、私のMongoクライアントで$ near、$ geoWithinとそれらのクエリを使って同じクエリを実行すると、正しい答えが得られます。

私のMongooseスクリプトで何が問題になっていますか?

このシナリオでは、within()。circle()を使用したthestのみが必要ですか?

答えて

0

最初のコードの半径が間違って定義されていることがわかります。このMongo documentationで が球状で

を言う:あなたはにGeoJSONポイントを指定している場合はtrue、MongoDBは測定

の単位としてメートルを使用しています。しかし、これはにGeoJSONポイントのためにとgeoNearのためです。
従来の座標形式[long、lat]の場合、半径値を3963.2で割り、それをマイルとしてキャストする必要があります。

関連する問題