Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

geoShape

項目一覧

  • 定義
  • 構文
  • オプション
geoShape

インデックス定義indexShapestrueに設定されている場合、 geoShape演算子は特定のジオメトリに関連するシェイプのクエリをサポートします。

検索する座標を指定する場合は、最初に 経度 、次に 緯度 を指定する必要があります。 経度の値は、両方を含む-180180の間で指定できます。 緯度の値は-9090の間で指定できます。 座標値は整数または double にすることができます。

注意

Atlas Search は以下の機能をサポートしていません。

  • 非デフォルトの座標参照システム(CRS)

  • 平面 XY 座標系 (2 次元)

  • 座標ペアのポイント表記(つまりpointFieldName: [12, 34]

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "geoShape": {
5 "path": "<field-to-search>",
6 "relation": "contains | disjoint | intersects | within",
7 "geometry": <GeoJSON-object>,
8 "score": <score-options>
9 }
10 }
11}

geoShape では、次の用語を使用してクエリを作成します。

フィールド
タイプ
説明
必要性
geometry
GeoJSON オブジェクト

検索する 多角形 、 MultiPolygon 、または LineString の形状または点を指定する GeoJSON オブジェクト。多角形は最後の位置が最初の位置と同じである閉じたループとして指定する必要があります。

地理空間結果を計算する場合、Atlas Search geoShape演算子とgeoWithin演算子、および MongoDB $geoIntersects演算子は異なるジオメトリを使用します。 この違いは、Atlas Search と MongoDB が多角形エッジを描画する方法で確認できます。

Atlas Search は 直列距離 に基づいて多角形を描画します は、座標参照システム内の 2 点間の最短のラインです。

MongoDB は、 測地型 のサードパーティのライブラリを使用して多角形を描画します 測地線を使用する。詳細については、 「 GeoJSON オブジェクト」 を参照してください。

Atlas Search と MongoDB では、多角形に関係する地理空間クエリで異なる結果が返される場合があります。

はい
path
文字列または複数の文字列の配列
インデックス付き地理タイプ フィールドまたは検索するフィールド。 詳細については、「パス構築」を参照してください。
はい
relation
列挙

クエリシェイプ ジオメトリとインデックス付きフィールド ジオメトリの関係。 値は次のいずれかになります。

  • contains - インデックス付きジオメトリにクエリ ジオメトリが含まれていることを示します。

  • disjoint - クエリ ジオメトリとインデックス ジオメトリの両方に共通のものがないことを示します。

  • intersects - クエリ ジオメトリとインデックス ジオメトリの両方が交差することを示します。

  • within - インデックス ジオメトリがクエリ ジオメトリ内にあることを示します。 withinLineStringまたはPointでは使用できません。

はい
score
オブジェクト

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

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

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

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

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

no

次の例では、 sample_airbnbデータベース内のlistingsAndReviewsコレクションを使用します。 クラスターにサンプル データセットがある場合は、ジオタイプ用のカスタム Atlas Search インデックスを作成し、クラスターでサンプル クエリを実行できます。

Tip

サンプル データセットをすでに読み込んでいる場合は、「Atlas Search スタートガイド」チュートリアルに従って、インデックスの定義を作成し、Atlas Search クエリを実行します。

以下は、 listingsAndReviewsコレクションのaddress.locationフィールドにインデックスを作成するためのサンプル インデックス定義です。

1{
2 "mappings": {
3 "fields": {
4 "address": {
5 "fields": {
6 "location": {
7 "indexShapes": true,
8 "type": "geo"
9 }
10 },
11 "type": "document"
12 }
13 }
14 }
15}

Atlas Search を使い始める には、サンプル データセットのロード、インデックス定義の作成、Atlas Search クエリの実行に関する手順が記載されています。

注意

次のサンプル クエリでは、インデックス定義内のindexShapestrueに設定されていることを確認します。

次の例では、 geoShape演算子を使用して、ニューヨークの指定された経度と緯度の座標で共通性のないプロパティを検索します。

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

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

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

1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoShape": {
5 "relation": "disjoint",
6 "geometry": {
7 "type": "Polygon",
8 "coordinates": [[[-161.323242,22.512557],
9 [-152.446289,22.065278],
10 [-156.09375,17.811456],
11 [-161.323242,22.512557]]]
12 },
13 "path": "address.location"
14 }
15 }
16 },
17 {
18 $limit: 3
19 },
20 {
21 $project: {
22 "_id": 0,
23 "name": 1,
24 "address": 1,
25 score: { $meta: "searchScore" }
26 }
27 }
28])

このクエリは、次の検索結果を返します。

1{
2 "name" : "Ribeira Charming Duplex",
3 "address" : {
4 "street" : "Porto, Porto, Portugal",
5 "suburb" : "",
6 "government_area" : "Cedofeita, Ildefonso, Sé, Miragaia, Nicolau, Vitória",
7 "market" : "Porto",
8 "country" : "Portugal",
9 "country_code" : "PT",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ -8.61308, 41.1413 ],
13 "is_location_exact" : false
14 }
15 }
16}
17{
18 "name" : "Horto flat with small garden",
19 "address" : {
20 "street" : "Rio de Janeiro, Rio de Janeiro, Brazil",
21 "suburb" : "Jardim Botânico",
22 "government_area" : "Jardim Botânico",
23 "market" : "Rio De Janeiro",
24 "country" : "Brazil",
25 "country_code" : "BR",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ -43.23074991429229, -22.966253551739655 ],
29 "is_location_exact" : true
30 }
31 }
32}
33{
34 "name" : "Private Room in Bushwick",
35 "address" : {
36 "street" : "Brooklyn, NY, United States",
37 "suburb" : "Brooklyn",
38 "government_area" : "Bushwick",
39 "market" : "New York",
40 "country" : "United States",
41 "country_code" : "US",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ -73.93615, 40.69791 ],
45 "is_location_exact" : true
46 }
47 }
48}

次の例では、 geoShape演算子を使用して、スペインの指定された経度と緯度の座標で交差するプロパティを検索します。

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

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

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

1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoShape": {
5 "relation": "intersects",
6 "geometry": {
7 "type": "MultiPolygon",
8 "coordinates": [
9 [[[2.16942,41.40082],
10 [2.17963,41.40087],
11 [2.18146,41.39716],
12 [2.15533,41.40686],
13 [2.14596,41.38475],
14 [2.17519,41.41035],
15 [2.16942,41.40082]]],
16 [[[2.16365,41.39416],
17 [2.16963,41.39726],
18 [2.15395,41.38005],
19 [2.17935,41.43038],
20 [2.16365,41.39416]]]
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 score: { $meta: "searchScore" }
36 }
37 }
38])

このクエリは、次の検索結果を返します。

1{
2 "name" : "Cozy bedroom Sagrada Familia",
3 "address" : {
4 "street" : "Barcelona, Catalunya, Spain",
5 "suburb" : "Eixample",
6 "government_area" : "el Fort Pienc",
7 "market" : "Barcelona",
8 "country" : "Spain",
9 "country_code" : "ES",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ 2.17963, 41.40087 ],
13 "is_location_exact" : true
14 }
15 }
16}
17{
18 "name" : "",
19 "address" : {
20 "street" : "Barcelona, Catalunya, Spain",
21 "suburb" : "Vila de Gràcia",
22 "government_area" : "la Vila de Gràcia",
23 "market" : "Barcelona",
24 "country" : "Spain",
25 "country_code" : "ES",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ 2.15759, 41.40349 ],
29 "is_location_exact" : true
30 }
31 }
32}
33{
34 "name" : "SPACIOUS RAMBLA CATALUÑA",
35 "address" : {
36 "street" : "Barcelona, Catalunya, Spain",
37 "suburb" : "L'Antiga Esquerra de l'Eixample",
38 "government_area" : "l'Antiga Esquerra de l'Eixample",
39 "market" : "Barcelona",
40 "country" : "Spain",
41 "country_code" : "ES",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ 2.15255, 41.39193 ],
45 "is_location_exact" : true
46 }
47 }
48}

次の例では、 geoShape演算子を使用して、指定された経度と緯度の座標内にあるニューヨークのプロパティを検索します。 クエリは、 sample_airbnbデータベース内のlistingsAndReviewsコレクション内のaddress.locationフィールドを検索します。

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

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

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

1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoShape": {
5 "relation": "within",
6 "geometry": {
7 "type": "Polygon",
8 "coordinates": [[[-74.3994140625,40.5305017757],
9 [-74.7290039063,40.5805846641],
10 [-74.7729492188,40.9467136651],
11 [-74.0698242188,41.1290213475],
12 [-73.65234375,40.9964840144],
13 [-72.6416015625,40.9467136651],
14 [-72.3559570313,40.7971774152],
15 [-74.3994140625,40.5305017757]]]
16 },
17 "path": "address.location"
18 }
19 }
20 },
21 {
22 $limit: 3
23 },
24 {
25 $project: {
26 "_id": 0,
27 "name": 1,
28 "address": 1,
29 score: { $meta: "searchScore" }
30 }
31 }
32])

このクエリは、次の検索結果を返します。

1{
2 "name" : "Private Room in Bushwick",
3 "address" : {
4 "street" : "Brooklyn, NY, United States",
5 "suburb" : "Brooklyn",
6 "government_area" : "Bushwick",
7 "market" : "New York",
8 "country" : "United States",
9 "country_code" : "US",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ -73.93615, 40.69791 ],
13 "is_location_exact" : true
14 }
15 },
16 {
17 "name" : "New York City - Upper West Side Apt",
18 "address" : {
19 "street" : "New York, NY, United States",
20 "suburb" : "Manhattan",
21 "government_area" : "Upper West Side",
22 "market" : "New York",
23 "country" : "United States",
24 "country_code" : "US",
25 "location" : {
26 "type" : "Point",
27 "coordinates" : [ -73.96523, 40.79962 ],
28 "is_location_exact" : false
29 }
30 },
31 "score" : 1
32 }
33 {
34 "name" : "Deluxe Loft Suite",
35 "address" : {
36 "street" : "Brooklyn, NY, United States",
37 "suburb" : "Greenpoint",
38 "government_area" : "Greenpoint",
39 "market" : "New York",
40 "country" : "United States",
41 "country_code" : "US",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ -73.94472, 40.72778 ],
45 "is_location_exact" : true
46 }
47 },
48 "score" : 1
49 }

戻る

facet