$geoWithin (ジオメトリ内)
最終更新:2026-10-09
$geoWithin (ジオメトリ内)
$geoWithin は、位置が指定したジオメトリの内部にあるドキュメントを検索します。$box(長方形)、$polygon、$center(平面の円)、$centerSphere(球面の円)、$geometry(GeoJSON)が使えます。`{ loc: { $geoWithin: { $box: [[0, 0], [10, 10]] } } }` のように指定します。境界上の点も含まれます。2dsphere または 2d インデックスが必要です。
| カテゴリ | 地理空間 |
|---|---|
| MongoDB バージョン | 2.4+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <location field>: { $geoWithin: { $geometry: <GeoJSON> } } }
⚙️ パラメータ
| 位置フィールド | 位置情報を格納するフィールド。 |
|---|---|
| ジオメトリ | $box、$polygon、$center、$centerSphere、または $geometry。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $geoWithin: 長方形の内部にある店舗
db.stores.find({
loc: { $geoWithin: { $box: [[-73.98, 40.75], [-73.97, 40.76]] } }
})
// GeoJSON ポリゴン
db.stores.find({
loc: { $geoWithin: { $geometry: { type: 'Polygon', coordinates: [[[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]] } } }
})
出力:
// 位置が長方形またはポリゴンの内部にある店舗を返す
📌 注意事項
- 2dsphere(GeoJSON)または 2d(旧来の座標ペア)インデックスが必要
- 境界上の点も含まれる
- 結果は距離順には並ばない。距離順には $near を使う
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$geoWithin と $near の違いは?
A$geoWithin は包含関係のみを判定し、並べ替えません。$near は距離順で結果を返します。
Q$geoWithin は円をサポートしますか?
Aはい。$center は平面の円、$centerSphere は球面の円を扱います。
Q$geoWithin にはインデックスが必要ですか?
Aはい。2dsphere または 2d インデックスが必須です。