0

Googleマップの座標と同様のmongoDB座標に保存しています-たとえば、20.2345,34.2034. 必要なのは、検索半径 (メートル単位) 内のすべてのドキュメントを取得することです。しかし、インデックスとクエリを使用するか、インデックス2dsphereとクエリを使用するかで混乱しますか???$nearSphere2d$near


確認しましたが、2dインデックス$near$nearSphereクエリの両方を使用すると、奇妙な結果が返されます。index を使用すると、とクエリ2dsphereの両方を使用して正しい結果が返されました。それらの間の距離=〜3800mの2つのポイントをチェックしました。次に、2番目のポイントを含むしきい値半径を探していました(最初のポイントからどこを見ていると仮定します)。結果は次のとおりです。$near$nearSphere

  1. インデックス: '2d', $near -> 半径 = ~57
  2. インデックス: '2d', $nearSphere -> 半径 = 0.99
  3. インデックス: '2dsphere', $near -> 半径 = ~3850
  4. インデックス: '2dsphere', $nearSphere -> 半径 = ~3850

2dインデックスで何が起こっているのかわかりません-私はいつも$geometry: { type: 'Point' ...ラジアンではなくメートルを使用していました...

いずれにせよ、2dsphereインデックスを使用するだけで問題ありません。また、「2d」から「2dsphere」にインデックスを再作成するために、コレクションを削除する必要がありました (db.collection.reIndex() は機能しませんでした)。

4

1 に答える 1

1

地球が球体であることをより厳密に反映するには、 http: //docs.mongodb.org/manual/applications/geospatial-indexes/2dsphereで説明されているインデックスが必要です。

インデックス上の$nearとの違いは完全にはわかりませんが、どちらでも機能するという印象を受けます。メートルだけでなくラジアンで距離を指定できるようです。$nearSphere2dsphere$nearSphere

于 2013-10-16T19:59:00.467 に答える