$nearSphere (球面距離検索)
最終更新:2026-10-09
$nearSphere (球面距離検索)
$nearSphere は、球面(大円)距離で近い順にジオスペーシャルなドキュメントを返します。`{ loc: { $nearSphere: { $geometry: { type: 'Point', coordinates: [lng, lat] }, $maxDistance: 5000 } } }` のように使います。$near とは異なり、常に球面距離をメートル単位で計算します(平面距離は 2d インデックス上の $near でのみ使われます)。2dsphere インデックスが必要です。
| カテゴリ | 地理空間 |
|---|---|
| MongoDB バージョン | 2.4+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <location field>: { $nearSphere: { $geometry: <Point>, $maxDistance: <meters> } } }
⚙️ パラメータ
| 位置フィールド | 位置情報を格納するフィールド。 |
|---|---|
| Point ジオメトリ | [経度, 緯度] を持つ GeoJSON Point。 |
| maxDistance | 任意。最大球面距離(メートル単位)。 |
戻り値:一致するドキュメントのカーソル(球面距離の昇順)
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $nearSphere: 5 km 以内の店舗を検索(球面距離)
// 座標は [経度, 緯度] の順
db.stores.find({
loc: { $nearSphere: {
$geometry: { type: 'Point', coordinates: [-73.97, 40.75] },
$maxDistance: 5000
} }
})
出力:
// 5 km 以内の店舗を球面距離の近い順に返す
📌 注意事項
- 常に球面距離で計算 — 世界中を対象にした近傍検索に最適
- 座標は [経度, 緯度] の順。逆にするとまったく別の場所を指す
- $near か $nearSphere のどちらか一方だけを使う
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$nearSphere と $near の違いは?
A$nearSphere は常に球面距離をメートル単位で使います。$near は 2d インデックス上では平面距離を使います。
Q座標の順序は?
AGeoJSON は [経度, 緯度] の順です。逆にすると大きくずれた場所になります。
Q$near と $nearSphere を併用できますか?
Aいいえ。クエリ内で使えるのはどちらか一方だけです。