Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

geoWithin

項目一覧

  • 定義
  • 構文
  • オプション
  • box
  • circle
  • geometry
geoWithin

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

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

  • 境界ボックス

  • 多角形

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

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

box

オブジェクト

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

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

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

条件付き

circle

オブジェクト

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

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

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

条件付き

geometry

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

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

条件付き

path

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

インデックス付き地理タイプ フィールドまたは検索するフィールド。 「パス構築 」を参照してください。

はい

score

オブジェクト

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

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

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

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

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

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}

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

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

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

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

注意

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

1db.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}

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

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

  • 出力を3の結果に制限する$limitステージ

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

注意

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

1db.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}

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

クエリには、次のものが含まれます。

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

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

注意

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}
1db.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}

戻る

geoShape