geoWithin
定義
geoWithin
geoWithin
演算子は、指定された形状内の地理的ポイントのクエリをサポートしています。 インデックス定義でindexShapes
の値がtrue
であっても、ポイントのみが返されます。以下内のポイントをクエリできます。
円
境界ボックス
多角形
検索する座標を指定する場合は、最初に 経度 、次に 緯度 を指定する必要があります。 経度の値は、両方を含む
-180
と180
の間で指定できます。 緯度の値は-90
と90
の間で指定できます。 座標値は整数または double にすることができます。注意
Atlas 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 オブジェクト。多角形は最後の位置が最初の位置と同じである閉じたループとして指定する必要があります。 地理空間結果を計算する場合、Atlas Search geoShape 演算子と geoWithin 演算子、およびMongoDB $geoIntersects 演算子は異なるジオメトリを使用します。この違いは、Atlas Search とMongoDBが多角形エッジを描画する方法で確認できます。 Atlas Search は 直列距離 に基づいて多角形を描画します は、座標参照システム内の 2 点間の最短のラインです。 MongoDBは、地理的タイプ または 平面モードのサードパーティ ライブラリ上に構築された2 dsphere インデックスに基づき、地理的モードを使用して多角形を描画します (2 d インデックス から)。詳細については、 「GeoJSON オブジェクト」 を参照してください。 Atlas Search と MongoDB では、多角形に関係する地理空間クエリで異なる結果が返される場合があります。 GeoJSON オブジェクト内で GeoJSON データを指定する方法については、「 GeoJSON オブジェクト 」を参照してください。
| 条件付き |
| 文字列または複数の文字列の配列 | インデックス付き地理タイプ フィールドまたは検索するフィールド。 「パス構築 」を参照してください。 | はい |
| オブジェクト | 一致する検索結果に割り当てる スコア 。 デフォルトでは、結果のスコアは
クエリで | no |
例
次の例では、 sample_airbnb
データベース内のlistingsAndReviews
コレクションを使用します。 クラスターにサンプル データセットがある場合は、ジオタイプ用のカスタム Atlas Search インデックスを作成し、クラスターでサンプル クエリを実行できます。
Tip
サンプル データセットをすでに読み込んでいる場合は、「Atlas Search スタートガイド」チュートリアルに従って、インデックスの定義を作成し、Atlas Search クエリを実行します。
geoWithin
演算子を使用して Atlas 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 } 13 } 14 }
box
例
次のクエリでは、 geoWithin
演算子とbox
フィールドを使用して、オーストラリアの境界ボックス内のプロパティを検索します。
クエリには以下が含まれます。
注意
Atlas Search クエリにdefault
という名前のインデックスを指定する必要はありません。 インデックスに別の名前がある場合は、 index
フィールドを指定する必要があります。
1 db.listingsAndReviews.aggregate([ 2 { 3 "$search": { 4 "geoWithin": { 5 "path": "address.location", 6 "box": { 7 "bottomLeft": { 8 "type": "Point", 9 "coordinates": [112.467, -55.050] 10 }, 11 "topRight": { 12 "type": "Point", 13 "coordinates": [168.000, -9.133] 14 } 15 } 16 } 17 } 18 }, 19 { 20 $limit: 3 21 }, 22 { 23 $project: { 24 "_id": 0, 25 "name": 1, 26 "address": 1 27 } 28 } 29 ])
クエリは、次の結果を返します。
1 { 2 "name" : "Surry Hills Studio - Your Perfect Base in Sydney", 3 "address" : { 4 "street" : "Surry Hills, NSW, Australia", 5 "suburb" : "Darlinghurst", 6 "government_area" : "Sydney", 7 "market" : "Sydney", 8 "country" : "Australia", 9 "country_code" : "AU", 10 "location" : { 11 "type" : "Point", 12 "coordinates" : [ 151.21554, -33.88029 ], 13 "is_location_exact" : true 14 } 15 } 16 } 17 { 18 "name" : "Sydney Hyde Park City Apartment (checkin from 6am)", 19 "address" : { 20 "street" : "Darlinghurst, NSW, Australia", 21 "suburb" : "Darlinghurst", 22 "government_area" : "Sydney", 23 "market" : "Sydney", 24 "country" : "Australia", 25 "country_code" : "AU", 26 "location" : { 27 "type" : "Point", 28 "coordinates" : [ 151.21346, -33.87603 ], 29 "is_location_exact" : false 30 } 31 } 32 } 33 { 34 "name" : "THE Place to See Sydney's FIREWORKS", 35 "address" : { 36 "street" : "Rozelle, NSW, Australia", 37 "suburb" : "Lilyfield/Rozelle", 38 "government_area" : "Leichhardt", 39 "market" : "Sydney", 40 "country" : "Australia", 41 "country_code" : "AU", 42 "location" : { 43 "type" : "Point", 44 "coordinates" : [ 151.17956, -33.86296 ], 45 "is_location_exact" : true 46 } 47 } 48 }
circle
例
次のクエリでは、 geoWithin
演算子とcircle
フィールドを使用して、カナダ内の指定された座標の半径 1 マイル以内のプロパティを検索します。
クエリには以下が含まれます。
注意
Atlas Search クエリにdefault
という名前のインデックスを指定する必要はありません。 インデックスに別の名前がある場合は、 index
フィールドを指定する必要があります。
1 db.listingsAndReviews.aggregate([ 2 { 3 "$search": { 4 "geoWithin": { 5 "circle": { 6 "center": { 7 "type": "Point", 8 "coordinates": [-73.54, 45.54] 9 }, 10 "radius": 1600 11 }, 12 "path": "address.location" 13 } 14 } 15 }, 16 { 17 $limit: 3 18 }, 19 { 20 $project: { 21 "_id": 0, 22 "name": 1, 23 "address": 1 24 } 25 } 26 ])
クエリは、次の結果を返します。
1 { 2 "name" : "Ligne verte - à 15 min de métro du centre ville.", 3 "address" : { 4 "street" : "Montréal, Québec, Canada", 5 "suburb" : "Hochelaga-Maisonneuve", 6 "government_area" : "Mercier-Hochelaga-Maisonneuve", 7 "market" : "Montreal", 8 "country" : "Canada", 9 "country_code" : "CA", 10 "location" : { 11 "type" : "Point", 12 "coordinates" : [ -73.54949, 45.54548 ], 13 "is_location_exact" : false 14 } 15 } 16 } 17 { 18 "name" : "Belle chambre à côté Metro Papineau", 19 "address" : { 20 "street" : "Montréal, QC, Canada", 21 "suburb" : "Gay Village", 22 "government_area" : "Ville-Marie", 23 "market" : "Montreal", 24 "country" : "Canada", 25 "country_code" : "CA", 26 "location" : { 27 "type" : "Point", 28 "coordinates" : [ -73.54985, 45.52797 ], 29 "is_location_exact" : false 30 } 31 } 32 } 33 { 34 "name" : "L'IDÉAL, ( à 2 min du métro Pie-IX ).", 35 "address" : { 36 "street" : "Montréal, Québec, Canada", 37 "suburb" : "Mercier-Hochelaga-Maisonneuve", 38 "government_area" : "Mercier-Hochelaga-Maisonneuve", 39 "market" : "Montreal", 40 "country" : "Canada", 41 "country_code" : "CA", 42 "location" : { 43 "type" : "Point", 44 "coordinates" : [ -73.55208, 45.55157 ], 45 "is_location_exact" : true 46 } 47 } 48 }
geometry
例
次の例では、 geoWithin
演算子とgeometry
フィールドを使用して、クラウドのプロパティを検索しています。 type
フィールドは、領域が GeoJSON 多角形であるか、マルチポリゴンであるかを指定します。
クエリには、次のものが含まれます。
注意
Atlas Search クエリにdefault
という名前のインデックスを指定する必要はありません。 インデックスに別の名前がある場合は、 index
フィールドを指定する必要があります。
1 db.listingsAndReviews.aggregate([ 2 { 3 "$search": { 4 "geoWithin": { 5 "geometry": { 6 "type": "Polygon", 7 "coordinates": [[[ -161.323242, 22.512557 ], 8 [ -152.446289, 22.065278 ], 9 [ -156.09375, 17.811456 ], 10 [ -161.323242, 22.512557 ]]] 11 }, 12 "path": "address.location" 13 } 14 } 15 }, 16 { 17 $limit: 3 18 }, 19 { 20 $project: { 21 "_id": 0, 22 "name": 1, 23 "address": 1 24 } 25 } 26 ])
クエリは、次の結果を返します。
1 { 2 "name" : "Ocean View Waikiki Marina w/prkg", 3 "address" : { 4 "street" : "Honolulu, HI, United States", 5 "suburb" : "Oʻahu", 6 "government_area" : "Primary Urban Center", 7 "market" : "Oahu", 8 "country" : "United States", 9 "country_code" : "US", 10 "location" : { 11 "type" : "Point", 12 "coordinates" : [ -157.83919, 21.28634 ], 13 "is_location_exact" : true 14 } 15 } 16 } 17 { 18 "name" : "Kailua-Kona, Kona Coast II 2b condo", 19 "address" : { 20 "street" : "Kailua-Kona, HI, United States", 21 "suburb" : "Kailua/Kona", 22 "government_area" : "North Kona", 23 "market" : "The Big Island", 24 "country" : "United States", 25 "country_code" : "US", 26 "location" : { 27 "type" : "Point", 28 "coordinates" : [ -155.96445, 19.5702 ], 29 "is_location_exact" : true 30 } 31 } 32 } 33 { 34 "name" : "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!", 35 "address" : { 36 "street" : "Lahaina, HI, United States", 37 "suburb" : "Maui", 38 "government_area" : "Lahaina", 39 "market" : "Maui", 40 "country" : "United States", 41 "country_code" : "US", 42 "location" : { 43 "type" : "Point", 44 "coordinates" : [ -156.68012, 20.96996 ], 45 "is_location_exact" : true 46 } 47 } 48 }
1 db.listingsAndReviews.aggregate([ 2 { 3 "$search": { 4 "geoWithin": { 5 "geometry": { 6 "type": "MultiPolygon", 7 "coordinates": [ 8 [[[-157.8412413882,21.2882235819], 9 [-157.8607925468,21.2962046205], 10 [-157.8646640634,21.3077019651], 11 [-157.862776699,21.320776283], 12 [-157.8341758705,21.3133826738], 13 [-157.8349985678,21.3000822569], 14 [-157.8412413882,21.2882235819]]], 15 [[[-157.852898124,21.301208833], 16 [-157.8580050499,21.3050871833], 17 [-157.8587346108,21.3098050385], 18 [-157.8508811028,21.3119240258], 19 [-157.8454308541,21.30396767], 20 [-157.852898124,21.301208833]]] 21 ] 22 }, 23 "path": "address.location" 24 } 25 } 26 }, 27 { 28 $limit: 3 29 }, 30 { 31 $project: { 32 "_id": 0, 33 "name": 1, 34 "address": 1 35 } 36 } 37 ])
クエリは、次の結果を返します。
1 { 2 "name" : "Heart of Honolulu, 2BD gem! Free Garage Parking!", 3 "address" : { 4 "street" : "Honolulu, HI, United States", 5 "suburb" : "Makiki/Lower Punchbowl/Tantalus", 6 "government_area" : "Primary Urban Center", 7 "market" : "Oahu", 8 "country" : "United States", 9 "country_code" : "US", 10 "location" : { 11 "type" : "Point", 12 "coordinates" : [ -157.84343, 21.30852 ], 13 "is_location_exact" : false 14 } 15 } 16 } 17 { 18 "name" : "Private Studio closed to town w/ compact parking", 19 "address" : { 20 "street" : "Honolulu, HI, United States", 21 "suburb" : "Oʻahu", 22 "government_area" : "Primary Urban Center", 23 "market" : "Oahu", 24 "country" : "United States", 25 "country_code" : "US", 26 "location" : { 27 "type" : "Point", 28 "coordinates" : [ -157.85228, 21.31184 ], 29 "is_location_exact" : true 30 } 31 } 32 } 33 { 34 "name" : "Comfortable Room (2) at Affordable Rates", 35 "address" : { 36 "street" : "Honolulu, HI, United States", 37 "suburb" : "Oʻahu", 38 "government_area" : "Primary Urban Center", 39 "market" : "Oahu", 40 "country" : "United States", 41 "country_code" : "US", 42 "location" : { 43 "type" : "Point", 44 "coordinates" : [ -157.83889, 21.29776 ], 45 "is_location_exact" : false 46 } 47 } 48 }