定義
geoWithingeoWithin演算子は、指定された形状内の地理的ポイントのクエリをサポートしています。 インデックス定義でindexShapesの値がtrueであっても、ポイントのみが返されます。以下内のポイントをクエリできます。
円
境界ボックス
多角形
検索する座標を指定する場合は、最初に 経度 、次に 緯度 を指定する必要があります。 経度の値は、両方を含む
-180と180の間で指定できます。 緯度の値は-90と90の間で指定できます。 座標値は整数または double にすることができます。注意
MongoDB Search は以下の機能をサポートしていません。
非デフォルトの座標参照システム(CRS)
平面 XY 座標系 (2 次元)
座標ペアのポイント表記(つまり
pointFieldName: [12, 34])
構文
geoWithin の構文は次のとおりです。
{ "$search": { "index": <index name>, // optional, defaults to "default" "geoWithin": { "path": "<field-to-search>", "box | circle | geometry": <object>, "score": <score-options> } } }
オプション
geoWithin では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| オブジェクト | 検索するボックスの左下と右上の GeoJSONポイントを指定するオブジェクト。 オブジェクトは次のフィールドを取ります。 GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。
| 条件付き |
| オブジェクト | 検索する中心点と半径をメートル単位で指定するオブジェクト。 オブジェクトには、次のGeoJSONフィールドが含まれています。
GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。
| 条件付き |
| GeoJSON オブジェクト | 検索対象の Multi ポリゴンまたは 多角形 を指定する GeoJSON オブジェクト。多角形は最後の位置が最初の位置と同じである閉じたループとして指定する必要があります。 地理空間結果を計算する場合、 MongoDB Search geoShape 演算子と geoWithin 演算子、およびMongoDB $geoIntersects 演算子は異なるジオメトリを使用します。この違いは、 MongoDB Search とMongoDB が多角形エッジを描画する方法で確認できます。 MongoDB Search は、座標参照システム内の 2 点間の最小ラインである直列距離 に基づいて多角形を描画します。 MongoDB は、 ジオメトリ タイプ のサードパーティ ライブラリ上に構築された2 dsphere インデックス 、または 平面モードに基づきジオデックスモードを使用して多角形を読み込み、2 d インデックス から収集します。詳細については、 「GeoJSON オブジェクト」 を参照してください。 MongoDB Search とMongoDBでは、多角形に関係する地理空間クエリで異なる結果が返される可能性がありました。 GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。
| 条件付き |
| 文字列または複数の文字列の配列 | 検索するインデックス付き geo 型フィールド。 | はい |
| オブジェクト | 一致する検索結果に割り当てる スコア 。 デフォルトでは、結果のスコアは
クエリで | no |
例
次の例では、 sample_airbnbデータベース内の listingsAndReviewsコレクションを使用します。クラスターにサンプルデータセットがある場合は、ジオタイプ用のカスタムMongoDB Searchインデックスを作成し、クラスターで例クエリを実行できます。
次のサンプル インデックス定義を使用して、 listingsAndReviewsコレクションのaddress.locationフィールドにインデックスを作成します。
1 { 2 "mappings": { 3 "fields": { 4 "address": { 5 "fields": { 6 "location": { 7 "type": "geo" 8 } 9 }, 10 "type": "document" 11 }, 12 "property_type": { 13 "type": "token" 14 } 15 } 16 } 17 }
box 例
次のクエリでは、 geoWithin演算子とboxフィールドを使用して、オーストラリアの境界ボックス内のプロパティを検索します。
クエリには以下が含まれます。
注意
MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。
基本的な例
メタデータの例
circle 例
次のクエリでは、 geoWithin演算子とcircleフィールドを使用して、カナダ内の指定された座標の半径 1 マイル以内のプロパティを検索します。
クエリには以下が含まれます。
$limitステージを使用して、出力を3の結果に制限します。$projectnameステージでは、 とaddress以外のすべてのフィールドが除外されます。また、Compass の例では、必要な手順はを参照。
注意
MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。
geometry 例
次の例では、 geoWithin演算子とgeometryフィールドを使用して、クラウドのプロパティを検索しています。 typeフィールドは、領域が GeoJSON 多角形であるか、マルチポリゴンであるかを指定します。
注意
MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。