Googleマップの座標と同様のmongoDB座標に保存しています-たとえば、20.2345,34.2034. 必要なのは、検索半径 (メートル単位) 内のすべてのドキュメントを取得することです。しかし、インデックスとクエリを使用するか、インデックス2dsphere
とクエリを使用するかで混乱しますか???$nearSphere
2d
$near
確認しましたが、2d
インデックス$near
と$nearSphere
クエリの両方を使用すると、奇妙な結果が返されます。index を使用すると、とクエリ2dsphere
の両方を使用して正しい結果が返されました。それらの間の距離=〜3800mの2つのポイントをチェックしました。次に、2番目のポイントを含むしきい値半径を探していました(最初のポイントからどこを見ていると仮定します)。結果は次のとおりです。$near
$nearSphere
- インデックス: '2d', $near -> 半径 = ~57
- インデックス: '2d', $nearSphere -> 半径 = 0.99
- インデックス: '2dsphere', $near -> 半径 = ~3850
- インデックス: '2dsphere', $nearSphere -> 半径 = ~3850
2d
インデックスで何が起こっているのかわかりません-私はいつも$geometry: { type: 'Point' ...
ラジアンではなくメートルを使用していました...
いずれにせよ、2dsphere
インデックスを使用するだけで問題ありません。また、「2d」から「2dsphere」にインデックスを再作成するために、コレクションを削除する必要がありました (db.collection.reIndex() は機能しませんでした)。