$geoNear (地理的近傍検索)
最終更新:2026-10-09
$geoNear (地理的近傍検索)
$geoNear は、地理的な近さの順でドキュメントを出力し、パイプラインの先頭ステージである必要があります。コレクションにはジオスペーシャルインデックスが必須です。distanceField で距離を出力し、球面・平面のどちらでも計算でき、minDistance と maxDistance でフィルターし、key で複数のジオフィールドから選択できます。各結果には計算済みの距離が付きます。
| カテゴリ | 高度と診断 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $geoNear: { near: { type: "Point", coordinates: [ <longitude>, <latitude> ] }, distanceField: "<distanceField>", spherical: <bool>, maxDistance: <meters>, query: <filter> } }
⚙️ パラメータ
| near | 基準点。GeoJSON のポイントまたは従来の座標配列。 |
|---|---|
| distanceField | 計算された距離を受け取るフィールド名。 |
| spherical | true の場合、球面幾何で距離を計算します。 |
| query | 追加のクエリフィルター。 |
戻り値:distanceField を含み、距離順に並べたドキュメントストリーム
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $geoNear: 5 km 以内の場所を検索
db.places.aggregate([
{ $geoNear: {
near: { type: 'Point', coordinates: [-73.98, 40.75] },
distanceField: 'dist',
spherical: true,
maxDistance: 5000
} }
])
出力:
// 距離の昇順でソートされ、各ドキュメントに dist が付く
📌 注意事項
- パイプラインの先頭ステージでなければならない
- コレクションにはジオスペーシャルインデックス(2dsphere または 2d)が必要
- GeoJSON の near には spherical: true が必要
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Qジオスペーシャルインデックスがない場合は?
Aエラーになります。コレクションに 2dsphere または 2d のジオスペーシャルインデックスが必要です。
Q距離でフィルターできますか?
Aはい。maxDistance と minDistance で指定します。球面モードではメートル単位です。
Q追加のクエリフィルターは付けられますか?
Aはい。query パラメータで指定します。例: { query: { category: 'restaurant' } }