$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計算された距離を受け取るフィールド名。
sphericaltrue の場合、球面幾何で距離を計算します。
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 が付く

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Qジオスペーシャルインデックスがない場合は?
Aエラーになります。コレクションに 2dsphere または 2d のジオスペーシャルインデックスが必要です。
Q距離でフィルターできますか?
Aはい。maxDistance と minDistance で指定します。球面モードではメートル単位です。
Q追加のクエリフィルターは付けられますか?
Aはい。query パラメータで指定します。例: { query: { category: 'restaurant' } }
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%