Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

geoWithin 演算子

geoWithin

geoWithin演算子は、指定された形状内の地理的ポイントのクエリをサポートしています。 インデックス定義indexShapesの値がtrueであっても、ポイントのみが返されます。

以下内のポイントをクエリできます。

  • 境界ボックス

  • 多角形

検索する座標を指定する場合は、最初に 経度 、次に 緯度 を指定する必要があります。 経度の値は、両方を含む-180180の間で指定できます。 緯度の値は-9090の間で指定できます。 座標値は整数または 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 では、次の用語を使用してクエリを作成します。

フィールド
タイプ
説明
必要性

box

オブジェクト

検索するボックスの左下と右上の GeoJSONポイントを指定するオブジェクト。 オブジェクトは次のフィールドを取ります。

GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。

boxcircle 、またはgeometryのいずれかが必要です。

条件付き

circle

オブジェクト

検索する中心点と半径をメートル単位で指定するオブジェクト。 オブジェクトには、次のGeoJSONフィールドが含まれています。

GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。

circlebox 、またはgeometryのいずれかが必要です。

条件付き

geometry

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 オブジェクト 」を参照してください。

geometrybox 、またはcircleのいずれかが必要です。

条件付き

path

文字列または複数の文字列の配列

検索するインデックス付き geo 型フィールド。

はい

score

オブジェクト

一致する検索結果に割り当てる スコア 。 デフォルトでは、結果のスコア1です。 次のオプションを使用してスコアを変更できます。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 結果のスコアを指定された式で置き換えます。

クエリで score を使用する方法については、「結果内のドキュメントのスコアリング」を参照してください。

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}

次のクエリでは、 geoWithin演算子とboxフィールドを使用して、オーストラリアの境界ボックス内のプロパティを検索します。

クエリには以下が含まれます。

  • $limitステージを使用して、出力を3の結果に制限します。

  • $projectステージでは、 nameaddressを除くすべてのフィールドが除外されます。

注意

MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。

次のクエリでは、 geoWithin演算子とcircleフィールドを使用して、カナダ内の指定された座標の半径 1 マイル以内のプロパティを検索します。

クエリには以下が含まれます。

  • $limitステージを使用して、出力を3の結果に制限します。

  • $projectnameステージでは、 とaddress 以外のすべてのフィールドが除外されます。また、Compass の例では、必要な手順はを参照。

注意

MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。

次の例では、 geoWithin演算子とgeometryフィールドを使用して、クラウドのプロパティを検索しています。 typeフィールドは、領域が GeoJSON 多角形であるか、マルチポリゴンであるかを指定します。

注意

MongoDB Search クエリに default という名前のインデックスを指定する必要はありません。インデックスに他の名前がある場合は、indexフィールドを指定する必要があります。

戻る

geoShape

項目一覧