Docs Menu
Docs Home
/
MongoDB Atlas
/ /

Atlas Search 複合ジオ JSON クエリの実行方法

項目一覧

  • Atlas Search インデックスの作成
  • 地理的フィールド、数値フィールド、テキスト フィールドを組み合わせたクエリの実行

このチュートリアルでは、 sample_airbnbデータベースの listingsAndReviewsコレクションにインデックスを作成し、 内の各プロパティに対してnameaddressproperty_typeを持つドキュメントを返すクエリを実行する方法について説明します。 coordinatesを使用して定義された多角形。

このチュートリアルでは、次の手順について説明します。

  1. sample_airbnb.listingsAndReviews コレクションの address フィールドに Atlas Search インデックスを設定します。

  2. 指定された地理的coordinates内の各プロパティのnameaddressproperty_typeを含む 10 個のドキュメントを返すクエリを実行します。 Atlas Search の結果には、タイプcondominiumのプロパティの優先順位が反映されており、結果内の各ドキュメントには関連性scoreが割り当てられ、最高から最低の順に返されます。

開始する前に、Atlas クラスターが前提条件に記載されている要件を満たしていることを確認してください。

Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin以上のアクセス権が必要です。

このセクションでは、 sample_airbnb.listingsAndReviewsコレクションのaddressフィールドに Atlas Search インデックスを作成します。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ クラスター]ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3
4
  • ガイドを利用する場合は、Atlas Search Visual Editor を選択します。

  • Raw インデックス定義を編集するには、Atlas Search JSON Editor を選択します。

5
  1. Index Nameフィールドにgeo-json-tutorialと入力します。

    インデックスにdefaultと名付けると、 $searchパイプライン ステージでindexパラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、 indexパラメータでこの名前を指定する必要があります。

  2. Database and Collectionセクションで、 sample_airbnbデータベースを検索し、 listingsAndReviewsコレクションを選択します。

6

インデックスを作成するには、 インターフェースで または を使用できます。Atlas SearchVisual EditorAtlas SearchJSON EditorAtlas user次のインデックス定義は、Atlas Search がインデックスを作成する必要があることを指定します。

  • コレクション内のすべてのフィールドが自動的にコレクションされます。

  • タイプgeoとしてのdocumentaddress.locationフィールド。

  1. [Next] をクリックします。

  2. [Refine Your Index] をクリックします。

  3. Field Mappingsセクションで、 Add Fieldをクリックして [ Add Field Mapping > Customized Configurationタブを開きます。

  4. Field Nameドロップダウンからaddress.locationを選択します。

  5. Data Typeドロップダウンをクリックし、Geo を選択します。

  6. [Add] をクリックします。

  7. [Save Changes] をクリックします。

  1. デフォルトのインデックス定義を、以下の例のインデックス定義に置き換えます。

    {
    "mappings": {
    "dynamic": true,
    "fields": {
    "address": {
    "fields": {
    "location": {
    "type": "geo"
    }
    },
    "type": "document"
    }
    }
    }
    }
  2. [Next] をクリックします。

7
8

インデックスが作成中であることを知らせるモーダル ウィンドウが表示されます。Close ボタンをクリックします。

9

インデックスの構築には約 1 分かかります。 作成している間、 Status列にはBuild in Progressと表示されます。 作成が完了すると、 Status列にはActiveと表示されます。


➤ このページの [言語の選択] ドロップダウンメニューを使用して、このセクションの例の言語を設定します。


このセクションでは、指定された地理的coordinates内の各プロパティに対してnameaddressproperty_typeを持つ 10 個のドキュメントを返すクエリを実行します。 各ドキュメントscoreを指定するフィールドも返され、結果はcondominiumタイプのプロパティを優先して並べ替えられます。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3

クエリするインデックスの右側にある [ Query ] ボタンをクリックします。

4

Edit Queryをクリックすると、 JSON形式のデフォルトのクエリ構文サンプルが表示されます。

5

次の Atlas Search クエリでは、複合演算子を使用して次のようにします。

  • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

  • タイプcondominiumのプロパティの結果を優先します。

注意

Search Testerでは、返されるドキュメント内のすべてのフィールドが表示されない場合があります。 クエリパスで指定したフィールドを含むすべてのフィールドを表示するには、結果内のドキュメントを展開します。

[
{
"$search": {
"index": "geo-json-tutorial",
"compound": {
"must": [{
"geoWithin": {
"geometry": {
"type": "Polygon",
"coordinates": [[[ -161.323242, 22.512557 ],
[ -152.446289, 22.065278 ],
[ -156.09375, 17.811456 ],
[ -161.323242, 22.512557 ]]]
},
"path": "address.location"
}
}],
"should": [{
"text": {
"path": "property_type",
"query": "Condominium"
}
}]
}
}
}
]
1SCORE: 2.238388776779175 _id: "1001265"
2 listing_url: "https://www.airbnb.com/rooms/1001265"
3 name: "Ocean View Waikiki Marina w/prkg"
4 summary: "A short distance from Honolulu's billion dollar mall,
5 and the same dis…"
6 ...
7 property_type: "Condominium"
8 ...
9 address: Object
10 street: "Honolulu, HI, United States"
11 suburb: "Oʻahu"
12 government_area: "Primary Urban Center"
13 market: "Oahu"
14 country: "United States"
15 country_code: "US"
16 location: Object
17 type: "Point"
18 coordinates: Array
19 0: -157.83919
20 1: 21.28634
21 is_location_exact: true
22 ...
23
24SCORE: 2.238388776779175 _id: "10227000"
25 listing_url: "https://www.airbnb.com/rooms/10227000"
26 name: "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!"
27 summary: "THIS IS A VERY SPACIOUS 1 BEDROOM FULL CONDO (SLEEPS 4) AT THE BEAUTIF…"
28 ...
29 property_type: "Condominium"
30 ...
31 address: Object
32 street: "Lahaina, HI, United States"
33 suburb: "Maui"
34 government_area: "Lahaina"
35 market: "Maui"
36 country: "United States"
37 country_code: "US"
38 location: Object
39 type: "Point"
40 coordinates: Array
41 0: -156.68012
42 1: 20.96996
43 is_location_exact: true
44 ...
45
46SCORE: 2.238388776779175 _id: "10266175"
47 listing_url: "https://www.airbnb.com/rooms/10266175"
48 name: "Makaha Valley Paradise with OceanView"
49 summary: "A beautiful and comfortable 1 Bedroom Air Conditioned Condo in Makaha …"
50 ...
51 property_type: "Condominium"
52 ...
53 address: Object
54 street: "Waianae, HI, United States"
55 suburb: "Leeward Side"
56 government_area: "Waianae"
57 market: "Oahu"
58 country: "United States"
59 country_code: "US"
60 location: Object
61 type: "Point"
62 coordinates: Array
63 0: -158.20291
64 1: 21.4818
65 is_location_exact: true
66 ...
67
68SCORE: 2.238388776779175 _id: "1042446"
69 listing_url: "https://www.airbnb.com/rooms/1042446"
70 name: "March 2019 availability! Oceanview on Sugar Beach!"
71 summary: ""
72 ...
73 property_type: "Condominium"
74 ...
75 address: Object
76 street: "Kihei, HI, United States"
77 suburb: "Maui"
78 government_area: "Kihei-Makena"
79 market: "Maui"
80 country: "United States"
81 country_code: "US"
82 location: Object
83 type: "Point"
84 coordinates: Array
85 0: -156.46881
86 1: 20.78621
87 is_location_exact: true
88 ...
89
90SCORE: 2.238388776779175 _id: "10527243"
91 listing_url: "https://www.airbnb.com/rooms/10527243"
92 name: "Tropical Jungle Oasis"
93 summary: "2 bedrooms, one with a queen sized bed, one with 2 single beds. 1 and …"
94 ...
95 property_type: "Condominium"
96 ...
97 address: Object
98 street: "Hilo, HI, United States"
99 suburb: "Island of Hawaiʻi"
100 government_area: "South Hilo"
101 market: "The Big Island"
102 country: "United States"
103 country_code: "US"
104 location: Object
105 type: "Point"
106 coordinates: Array
107 0: -155.09259
108 1: 19.73108
109 is_location_exact: true
110 ...
111
112SCORE: 2.238388776779175 _id: "1104768"
113 listing_url: "https://www.airbnb.com/rooms/1104768"
114 name: "2 Bdrm/2 Bath Family Suite Ocean View"
115 summary: "This breathtaking 180 degree view of Waikiki is one of a kind. You wil…"
116 ...
117 property_type: "Condominium"
118 ...
119 address: Object
120 street: "Honolulu, HI, United States"
121 suburb: "Waikiki"
122 government_area: "Primary Urban Center"
123 market: "Oahu"
124 country: "United States"
125 country_code: "US"
126 location: Object
127 type: "Point"
128 coordinates: Array
129 0: -157.82696
130 1: 21.27971
131 is_location_exact: true
132 ...
133
134SCORE: 2.238388776779175 _id: "11207193"
135 listing_url: "https://www.airbnb.com/rooms/11207193"
136 name: "302 Kanai A Nalu Ocean front/view"
137 summary: "Welcome to Kana'i A Nalu a quiet resort that sits on the ocean away fr…"
138 ...
139 property_type: "Condominium"
140 ...
141 address: Object
142 street: "Wailuku, HI, United States"
143 suburb: "Maui"
144 government_area: "Kihei-Makena"
145 market: "Maui"
146 country: "United States"
147 country_code: "US"
148 location: Object
149 type: "Point"
150 coordinates: Array
151 0: -156.5039
152 1: 20.79664
153 is_location_exact: true
154 ...
155
156SCORE: 2.238388776779175 _id: "11319047"
157 listing_url: "https://www.airbnb.com/rooms/11319047"
158 name: "Sugar Beach Resort 1BR Ground Floor Condo !"
159 summary: "The Sugar Beach Resort enjoys a beachfront setting fit for a postcard."
160 ...
161 property_type: "Condominium"
162 ...
163 address: Object
164 street: "Kihei, HI, United States"
165 suburb: "Maui"
166 government_area: "Kihei-Makena"
167 market: "Maui"
168 country: "United States"
169 country_code: "US"
170 location: Object
171 type: "Point"
172 coordinates: Array
173 0: -156.46697
174 1: 20.78484
175 is_location_exact: true
176 ...
177
178SCORE: 2.238388776779175 _id: "11695887"
179 listing_url: "https://www.airbnb.com/rooms/11695887"
180 name: "2 BR Oceanview - Great Location!"
181 summary: "Location, location, location... This is a great 2 bed, 2 bath condo is…"
182 ...
183 property_type: "Condominium"
184 ...
185 address: Object
186 street: "Kihei, HI, United States"
187 suburb: "Kihei/Wailea"
188 government_area: "Kihei-Makena"
189 market: "Maui"
190 country: "United States"
191 country_code: "US"
192 location: Object
193 type: "Point"
194 coordinates: Array
195 0: -156.44917
196 1: 20.73013
197 is_location_exact: true
198 ...
199
200SCORE: 2.238388776779175 _id: "11817249"
201 listing_url: "https://www.airbnb.com/rooms/11817249"
202 name: "PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC"
203 summary: "Book with confidence this stunning 2 bedroom, 2 bathroom condo at the …"
204 ...
205 property_type: "Condominium"
206 ...
207 address: Object
208 street: "Kihei, HI, United States"
209 suburb: "Maui"
210 government_area: "Kihei-Makena"
211 market: "Maui"
212 country: "United States"
213 country_code: "US"
214 location: Object
215 type: "Point"
216 coordinates: Array
217 0: -156.4409
218 1: 20.69735
219 is_location_exact: true
220 ...
1

ターミナル ウィンドウでmongoshを開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh経由での接続 」を参照してください。

2

mongoshプロンプトで次のコマンドを実行します。

use sample_airbnb
3

次の Atlas Search クエリは、

  • 複合$searchステージを使用して次の操作を行います。

    • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

    • タイプcondominiumのプロパティの結果を優先します。

  • $projectステージを使用して次の操作を行います。

    • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

    • 返された各ドキュメントに関連性scoreを追加します。

クエリは次のとおりです。

db.listingsAndReviews.aggregate([
{
"$search": {
"index": "geo-json-tutorial",
"compound": {
"must": [{
"geoWithin": {
"geometry": {
"type": "Polygon",
"coordinates": [[[ -161.323242, 22.512557 ],
[ -152.446289, 22.065278 ],
[ -156.09375, 17.811456 ],
[ -161.323242, 22.512557 ]]]
},
"path": "address.location"
}
}],
"should": [{
"text": {
"path": "property_type",
"query": "Condominium"
}
}]
}
}
},
{
"$limit": 10
},
{
$project: {
"_id": 0,
"name": 1,
"address": 1,
"property_type": 1,
score: { $meta: "searchScore" }
}
}
])
[
{
name: 'Ocean View Waikiki Marina w/prkg',
property_type: 'Condominium',
address: {
street: 'Honolulu, HI, United States',
suburb: 'Oʻahu',
government_area: 'Primary Urban Center',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -157.83919, 21.28634 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!',
property_type: 'Condominium',
address: {
street: 'Lahaina, HI, United States',
suburb: 'Maui',
government_area: 'Lahaina',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.68012, 20.96996 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Makaha Valley Paradise with OceanView',
property_type: 'Condominium',
address: {
street: 'Waianae, HI, United States',
suburb: 'Leeward Side',
government_area: 'Waianae',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -158.20291, 21.4818 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'March 2019 availability! Oceanview on Sugar Beach!',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.46881, 20.78621 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Tropical Jungle Oasis',
property_type: 'Condominium',
address: {
street: 'Hilo, HI, United States',
suburb: 'Island of Hawaiʻi',
government_area: 'South Hilo',
market: 'The Big Island',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -155.09259, 19.73108 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '2 Bdrm/2 Bath Family Suite Ocean View',
property_type: 'Condominium',
address: {
street: 'Honolulu, HI, United States',
suburb: 'Waikiki',
government_area: 'Primary Urban Center',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -157.82696, 21.27971 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '302 Kanai A Nalu Ocean front/view',
property_type: 'Condominium',
address: {
street: 'Wailuku, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.5039, 20.79664 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Sugar Beach Resort 1BR Ground Floor Condo !',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.46697, 20.78484 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '2 BR Oceanview - Great Location!',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Kihei/Wailea',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.44917, 20.73013 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.4409, 20.69735 ],
is_location_exact: true
}
},
score: 2.238388776779175
}
]
1

MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。

2

Database画面で、 sample_airbnbデータベースをクリックし、 listingsAndReviewsコレクションをクリックします。

3

以下のクエリでは、

  • 複合$searchステージを使用して次の操作を行います。

    • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

    • タイプcondominiumのプロパティの結果を優先します。

  • $projectステージを使用して次の操作を行います。

    • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

    • 返された各ドキュメントに関連性scoreを追加します。

MongoDB Compass でこの Atlas Search クエリを実行するには:

  1. [Aggregations] タブをクリックします。

  2. Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。

    パイプラインステージ
    クエリ

    $search

    {
    'index': 'geo-json-tutorial',
    'compound': {
    'must': [
    {
    'geoWithin': {
    'geometry': {
    'type': 'Polygon',
    'coordinates': [
    [
    [
    -161.323242, 22.512557
    ], [
    -152.446289, 22.065278
    ], [
    -156.09375, 17.811456
    ], [
    -161.323242, 22.512557
    ]
    ]
    ]
    },
    'path': 'address.location'
    }
    }
    ],
    'should': [
    {
    'text': {
    'path': 'property_type',
    'query': 'Condominium'
    }
    }
    ]
    }
    }

    $limit

    10

    $project

    {
    '_id': 0,
    'name': 1,
    'address': 1,
    'property_type': 1,
    'score': {
    '$meta': 'searchScore'
    }
    }

Auto Previewを有効にした場合、MongoDB Compass は$projectパイプライン ステージの横に次のドキュメントを表示します。

1{
2 name: 'Ocean View Waikiki Marina w/prkg',
3 property_type: 'Condominium',
4 address: {
5 street: 'Honolulu, HI, United States',
6 suburb: 'Oʻahu',
7 government_area: 'Primary Urban Center',
8 market: 'Oahu',
9 country: 'United States',
10 country_code: 'US',
11 location: {
12 type: 'Point',
13 coordinates: [ -157.83919, 21.28634 ],
14 is_location_exact: true
15 }
16 },
17 score: 2.238388776779175
18},
19{
20 name: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!',
21 property_type: 'Condominium',
22 address: {
23 street: 'Lahaina, HI, United States',
24 suburb: 'Maui',
25 government_area: 'Lahaina',
26 market: 'Maui',
27 country: 'United States',
28 country_code: 'US',
29 location: {
30 type: 'Point',
31 coordinates: [ -156.68012, 20.96996 ],
32 is_location_exact: true
33 }
34 },
35 score: 2.238388776779175
36},
37{
38 name: 'Makaha Valley Paradise with OceanView',
39 property_type: 'Condominium',
40 address: {
41 street: 'Waianae, HI, United States',
42 suburb: 'Leeward Side',
43 government_area: 'Waianae',
44 market: 'Oahu',
45 country: 'United States',
46 country_code: 'US',
47 location: {
48 type: 'Point',
49 coordinates: [ -158.20291, 21.4818 ],
50 is_location_exact: true
51 }
52 },
53 score: 2.238388776779175
54},
55{
56 name: 'March 2019 availability! Oceanview on Sugar Beach!',
57 property_type: 'Condominium',
58 address: {
59 street: 'Kihei, HI, United States',
60 suburb: 'Maui',
61 government_area: 'Kihei-Makena',
62 market: 'Maui',
63 country: 'United States',
64 country_code: 'US',
65 location: {
66 type: 'Point',
67 coordinates: [ -156.46881, 20.78621 ],
68 is_location_exact: true
69 }
70 },
71 score: 2.238388776779175
72},
73{
74 name: 'Tropical Jungle Oasis',
75 property_type: 'Condominium',
76 address: {
77 street: 'Hilo, HI, United States',
78 suburb: 'Island of Hawaiʻi',
79 government_area: 'South Hilo',
80 market: 'The Big Island',
81 country: 'United States',
82 country_code: 'US',
83 location: {
84 type: 'Point',
85 coordinates: [ -155.09259, 19.73108 ],
86 is_location_exact: true
87 }
88 },
89 score: 2.238388776779175
90},
91{
92 name: '2 Bdrm/2 Bath Family Suite Ocean View',
93 property_type: 'Condominium',
94 address: {
95 street: 'Honolulu, HI, United States',
96 suburb: 'Waikiki',
97 government_area: 'Primary Urban Center',
98 market: 'Oahu',
99 country: 'United States',
100 country_code: 'US',
101 location: {
102 type: 'Point',
103 coordinates: [ -157.82696, 21.27971 ],
104 is_location_exact: true
105 }
106 },
107 score: 2.238388776779175
108},
109{
110 name: '302 Kanai A Nalu Ocean front/view',
111 property_type: 'Condominium',
112 address: {
113 street: 'Wailuku, HI, United States',
114 suburb: 'Maui',
115 government_area: 'Kihei-Makena',
116 market: 'Maui',
117 country: 'United States',
118 country_code: 'US',
119 location: {
120 type: 'Point',
121 coordinates: [ -156.5039, 20.79664 ],
122 is_location_exact: true
123 }
124 },
125 score: 2.238388776779175
126},
127{
128 name: 'Sugar Beach Resort 1BR Ground Floor Condo !',
129 property_type: 'Condominium',
130 address: {
131 street: 'Kihei, HI, United States',
132 suburb: 'Maui',
133 government_area: 'Kihei-Makena',
134 market: 'Maui',
135 country: 'United States',
136 country_code: 'US',
137 location: {
138 type: 'Point',
139 coordinates: [ -156.46697, 20.78484 ],
140 is_location_exact: true
141 }
142 },
143 score: 2.238388776779175
144},
145{
146 name: '2 BR Oceanview - Great Location!',
147 property_type: 'Condominium',
148 address: {
149 street: 'Kihei, HI, United States',
150 suburb: 'Kihei/Wailea',
151 government_area: 'Kihei-Makena',
152 market: 'Maui',
153 country: 'United States',
154 country_code: 'US',
155 location: {
156 type: 'Point',
157 coordinates: [ -156.44917, 20.73013 ],
158 is_location_exact: true
159 }
160 },
161 score: 2.238388776779175
162},
163{
164 name: 'PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC',
165 property_type: 'Condominium',
166 address: {
167 street: 'Kihei, HI, United States',
168 suburb: 'Maui',
169 government_area: 'Kihei-Makena',
170 market: 'Maui',
171 country: 'United States',
172 country_code: 'US',
173 location: {
174 type: 'Point',
175 coordinates: [ -156.4409, 20.69735 ],
176 is_location_exact: true
177 }
178 },
179 score: 2.238388776779175
180}

$search パイプライン ステージの詳細については、リファレンス ページを参照してください。集計パイプラインの完全なドキュメントについては、 「MongoDB Server マニュアル」を参照してください。

1
  1. combined-geo-query という新しいディレクトリを作成し、dotnet new コマンドでプロジェクトを初期化します。

    mkdir combined-geo-query
    cd combined-geo-query
    dotnet new console
  2. .NET/C# ドライバーを依存関係としてプロジェクトに追加します。

    dotnet add package MongoDB.Driver
2
  1. Program.csファイルの内容を次のコードで置き換えます。

    次の Atlas Search クエリは、

    • 複合$searchステージを使用して次の操作を行います。

      • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

      • タイプcondominiumのプロパティの結果を優先します。

    • $projectステージを使用して次の操作を行います。

      • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

      • 返された各ドキュメントに関連性scoreを追加します。

    1using MongoDB.Bson;
    2using MongoDB.Bson.IO;
    3using MongoDB.Bson.Serialization;
    4using MongoDB.Bson.Serialization.Attributes;
    5using MongoDB.Bson.Serialization.Conventions;
    6using MongoDB.Driver;
    7using MongoDB.Driver.GeoJsonObjectModel;
    8using MongoDB.Driver.Search;
    9using System;
    10
    11public class GeoQuery
    12{
    13 private const string MongoConnectionString = "<connection-string>";
    14
    15 public static void Main(string[] args)
    16 {
    17 // allow automapping of the camelCase database fields to our AirbnbDocument
    18 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    19 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    20
    21 // connect to your Atlas cluster
    22 var mongoClient = new MongoClient(MongoConnectionString);
    23 var airbnbDatabase = mongoClient.GetDatabase("sample_airbnb");
    24 var airbnbCollection = airbnbDatabase.GetCollection<AirbnbDocument>("listingsAndReviews");
    25
    26 // declare data for the compound query
    27 string property_type = "Condominium";
    28 var coordinates = new GeoJson2DCoordinates[]
    29 {
    30 new(-161.323242, 22.512557),
    31 new(-152.446289, 22.065278),
    32 new(-156.09375, 17.811456),
    33 new(-161.323242, 22.512557)
    34 };
    35 var polygon = GeoJson.Polygon(coordinates);
    36
    37 // define and run pipeline
    38 var results = airbnbCollection.Aggregate()
    39 .Search(Builders<AirbnbDocument>.Search.Compound()
    40 .Must(Builders<AirbnbDocument>.Search.GeoWithin(airbnb => airbnb.Address.Location, polygon))
    41 .Should((Builders<AirbnbDocument>.Search.Text(airbnb => airbnb.PropertyType, property_type))),
    42 indexName: "geo-json-tutorial")
    43 .Limit (10)
    44 .Project<AirbnbDocument>(Builders<AirbnbDocument>.Projection
    45 .Include(airbnb => airbnb.PropertyType)
    46 .Include(airbnb => airbnb.Address.Location)
    47 .Include(airbnb => airbnb.Name)
    48 .Exclude(airbnb => airbnb.Id)
    49 .MetaSearchScore(airbnb => airbnb.Score))
    50 .ToList();
    51
    52 // print results
    53 foreach (var x in results) {
    54 Console.WriteLine(x.ToJson());
    55 }
    56 }
    57}
    58[BsonIgnoreExtraElements]
    59public class AirbnbDocument
    60{
    61 [BsonIgnoreIfDefault]
    62 public ObjectId Id { get; set; }
    63 public String Name { get; set; }
    64 [BsonElement("property_type")]
    65 public string PropertyType { get; set; }
    66 public Address Address { get; set; }
    67 public double Score { get; set; }
    68}
    69[BsonIgnoreExtraElements]
    70public class Address
    71{
    72 public GeoJsonPoint<GeoJson2DCoordinates> Location { get; set; }
    73}
  2. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

3
dotnet run combined-geo-query.csproj
{
"name" : "Ocean View Waikiki Marina w/prkg",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-157.83919, 21.286339999999999],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.68011999999999, 20.96996],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "Makaha Valley Paradise with OceanView",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-158.20291, 21.4818],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "March 2019 availability! Oceanview on Sugar Beach!",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.46880999999999, 20.786210000000001],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "Tropical Jungle Oasis",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-155.09259, 19.731079999999999],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "2 Bdrm/2 Bath Family Suite Ocean View",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-157.82696000000001, 21.279710000000001],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "302 Kanai A Nalu Ocean front/view",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.50389999999999, 20.79664],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "Sugar Beach Resort 1BR Ground Floor Condo !",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.46697, 20.784839999999999],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "2 BR Oceanview - Great Location!",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.44917000000001, 20.730129999999999],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
{
"name" : "PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC",
"property_type" : "Condominium",
"address" : {
"location" : {
"type" : "Point",
"coordinates" : [-156.4409, 20.69735],
"is_location_exact" : true
}
},
"score" : 2.2383887767791748
}
1
2

次のコード例では、次を行います。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • 複合$searchステージを使用して次の操作を行います。

    • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

    • タイプcondominiumのプロパティの結果を優先します。

  • $projectステージを使用して次の操作を行います。

    • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

    • 返された各ドキュメントに関連性scoreを追加します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 // connect to your Atlas cluster
14 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
15 if err != nil {
16 panic(err)
17 }
18 defer client.Disconnect(context.TODO())
19
20 // set namespace
21 collection := client.Database("sample_airbnb").Collection("listingsAndReviews")
22
23 // define polygon
24 polygon := [][][]float64{{
25 {-161.323242, 22.512557},
26 {-152.446289, 22.065278},
27 {-156.09375, 17.811456},
28 {-161.323242, 22.512557},
29 }}
30
31 // define pipeline
32 searchStage := bson.D{{"$search", bson.M{
33 "index": "geo-json-tutorial",
34 "compound": bson.M{
35 "must": bson.M{
36 "geoWithin": bson.M{
37 "geometry": bson.M{
38 "type": "Polygon",
39 "coordinates": polygon,
40 },
41 "path": "address.location",
42 },
43 },
44 "should": bson.M{
45 "text": bson.M{
46 "path": "property_type",
47 "query": "Condominium",
48 }},
49 },
50 },
51 }}
52 limitStage := bson.D{{"$limit", 10}}
53 projectStage := bson.D{{"$project", bson.D{{"name", 1}, {"address", 1}, {"property_type", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}}
54
55 // run pipeline
56 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
57 if err != nil {
58 panic(err)
59 }
60
61 // print results
62 var results []bson.D
63 if err = cursor.All(context.TODO(), &results); err != nil {
64 panic(err)
65 }
66 for _, result := range results {
67 fmt.Println(result)
68 }
69}
3

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4
go run run-geo-query.go
[{name Ocean View Waikiki Marina w/prkg} {property_type Condominium} {address [{street Honolulu, HI, United States} {suburb Oʻahu} {government_area Primary Urban Center} {market Oahu} {country United States} {country_code US} {location [{type Point} {coordinates [-157.83919 21.28634]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!} {property_type Condominium} {address [{street Lahaina, HI, United States} {suburb Maui} {government_area Lahaina} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.68012 20.96996]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name Makaha Valley Paradise with OceanView} {property_type Condominium} {address [{street Waianae, HI, United States} {suburb Leeward Side} {government_area Waianae} {market Oahu} {country United States} {country_code US} {location [{type Point} {coordinates [-158.20291 21.4818]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name March 2019 availability! Oceanview on Sugar Beach!} {property_type Condominium} {address [{street Kihei, HI, United States} {suburb Maui} {government_area Kihei-Makena} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.46881 20.78621]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name Tropical Jungle Oasis} {property_type Condominium} {address [{street Hilo, HI, United States} {suburb Island of Hawaiʻi} {government_area South Hilo} {market The Big Island} {country United States} {country_code US} {location [{type Point} {coordinates [-155.09259 19.73108]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name 2 Bdrm/2 Bath Family Suite Ocean View} {property_type Condominium} {address [{street Honolulu, HI, United States} {suburb Waikiki} {government_area Primary Urban Center} {market Oahu} {country United States} {country_code US} {location [{type Point} {coordinates [-157.82696 21.27971]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name 302 Kanai A Nalu Ocean front/view} {property_type Condominium} {address [{street Wailuku, HI, United States} {suburb Maui} {government_area Kihei-Makena} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.5039 20.79664]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name Sugar Beach Resort 1BR Ground Floor Condo !} {property_type Condominium} {address [{street Kihei, HI, United States} {suburb Maui} {government_area Kihei-Makena} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.46697 20.78484]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name 2 BR Oceanview - Great Location!} {property_type Condominium} {address [{street Kihei, HI, United States} {suburb Kihei/Wailea} {government_area Kihei-Makena} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.44917 20.73013]} {is_location_exact true}]}]} {score 2.238388776779175}]
[{name PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC} {property_type Condominium} {address [{street Kihei, HI, United States} {suburb Maui} {government_area Kihei-Makena} {market Maui} {country United States} {country_code US} {location [{type Point} {coordinates [-156.4409 20.69735]} {is_location_exact true}]}]} {score 2.238388776779175}]
1

junit

4.11以降のバージョン

mongodb-driver-sync

4.3.0以降のバージョン

slf4j-log4j12

1.7.30以降のバージョン

2
3

次のコード例では、次を行います。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • 複合$searchステージを使用して次の操作を行います。

    • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

    • タイプcondominiumのプロパティの結果を優先します。

  • $projectステージを使用して次の操作を行います。

    • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

    • 返された各ドキュメントに関連性scoreを追加します。

  • カーソルを反復処理し、次に一致するドキュメントを出力します
    クエリを実行します。
1import java.util.Arrays;
2import static com.mongodb.client.model.Filters.eq;
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.computed;
6import static com.mongodb.client.model.Projections.excludeId;
7import static com.mongodb.client.model.Projections.fields;
8import static com.mongodb.client.model.Projections.include;
9import com.mongodb.client.MongoClient;
10import com.mongodb.client.MongoClients;
11import com.mongodb.client.MongoCollection;
12import com.mongodb.client.MongoDatabase;
13import org.bson.Document;
14
15public class GeoQuery {
16 public static void main( String[] args ) {
17 Document agg = new Document( "$search",
18 new Document( "index", "geo-json-tutorial")
19 .append("compound",
20 new Document("must", Arrays.asList(new Document("geoWithin",
21 new Document("geometry",
22 new Document("type", "Polygon")
23 .append("coordinates", Arrays.asList(Arrays.asList(Arrays.asList(-161.323242d, 22.512557d), Arrays.asList(-152.446289d, 22.065278d), Arrays.asList(-156.09375d, 17.811456d), Arrays.asList(-161.323242d, 22.512557d)))))
24 .append("path", "address.location"))))
25 .append("should", Arrays.asList(new Document("text",
26 new Document("path", "property_type")
27 .append("query", "Condominium"))))));
28
29 String uri = "<connection-string>";
30
31 try (MongoClient mongoClient = MongoClients.create(uri)) {
32 MongoDatabase database = mongoClient.getDatabase("sample_airbnb");
33 MongoCollection<Document> collection = database.getCollection("listingsAndReviews");
34
35 collection.aggregate(Arrays.asList(agg,
36 limit(10),
37 project(fields(excludeId(), include("name", "address", "property_type"), computed("score", new Document("$meta", "searchScore"))))))
38 .forEach(doc -> System.out.println(doc.toJson() + "\n"));
39 }
40 }
41}

注意

Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。

package com.mongodb.drivers;
4

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

5
javac GeoQuery.java
java GeoQuery
{"name": "Ocean View Waikiki Marina w/prkg", "property_type": "Condominium", "address": {"street": "Honolulu, HI, United States", "suburb": "O\u02bbahu", "government_area": "Primary Urban Center", "market": "Oahu", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-157.83919, 21.28634], "is_location_exact": true}}, "score": 1.0},
{"name": "Kailua-Kona, Kona Coast II 2b condo", "property_type": "Apartment", "address": {"street": "Kailua-Kona, HI, United States", "suburb": "Kailua/Kona", "government_area": "North Kona", "market": "The Big Island", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-155.96445, 19.5702], "is_location_exact": true}}, "score": 1.0},
{"name": "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!", "property_type": "Condominium", "address": {"street": "Lahaina, HI, United States", "suburb": "Maui", "government_area": "Lahaina", "market": "Maui", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-156.68012, 20.96996], "is_location_exact": true}}, "score": 1.0},
{"name": "Makaha Valley Paradise with OceanView", "property_type": "Condominium", "address": {"street": "Waianae, HI, United States", "suburb": "Leeward Side", "government_area": "Waianae", "market": "Oahu", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-158.20291, 21.4818], "is_location_exact": true}}, "score": 1.0},
{"name": "~Ao Lele~ Flying Cloud", "property_type": "Treehouse", "address": {"street": "Volcano, HI, United States", "suburb": "Island of Hawai\u02bbi", "government_area": "Puna", "market": "The Big Island", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-155.21763, 19.42151], "is_location_exact": false}}, "score": 1.0},
{"name": "Private OceanFront - Bathtub Beach. Spacious House", "property_type": "House", "address": {"street": "Laie, HI, United States", "suburb": "Ko'olauloa", "government_area": "Koolauloa", "market": "Oahu", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-157.91952, 21.63549], "is_location_exact": true}}, "score": 1.0},
{"name": "Banyan Bungalow", "property_type": "Bungalow", "address": {"street": "Waialua, HI, United States", "suburb": "O\u02bbahu", "government_area": "North Shore Oahu", "market": "Oahu", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-158.1602, 21.57561], "is_location_exact": false}}, "score": 1.0},
{"name": "March 2019 availability! Oceanview on Sugar Beach!", "property_type": "Condominium", "address": {"street": "Kihei, HI, United States", "suburb": "Maui", "government_area": "Kihei-Makena", "market": "Maui", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-156.46881, 20.78621], "is_location_exact": true}}, "score": 1.0},
{"name": "Tropical Jungle Oasis", "property_type": "Condominium", "address": {"street": "Hilo, HI, United States", "suburb": "Island of Hawai\u02bbi", "government_area": "South Hilo", "market": "The Big Island", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-155.09259, 19.73108], "is_location_exact": true}}, "score": 1.0},
{"name": "Jubilee By The Sea (Ocean Views)", "property_type": "House", "address": {"street": "Kailua-Kona, HI, United States", "suburb": "Island of Hawai\u02bbi", "government_area": "North Kona", "market": "The Big Island", "country": "United States", "country_code": "US", "location": {"type": "Point", "coordinates": [-155.97349, 19.61318], "is_location_exact": false}}, "score": 1.0}
1

mongodb-driver-kotlin-coroutine

4.10.0以降のバージョン

2
3

次のコード例では、次を行います。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • 複合$searchステージを使用して次の操作を行います。

    • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

    • タイプcondominiumのプロパティの結果を優先します。

  • $projectステージを使用して次の操作を行います。

    • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

    • 返された各ドキュメントに関連性scoreを追加します。

  • クエリに一致するドキュメントをAggregateFlowインスタンスから出力します。

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // connect to your Atlas cluster
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12
13 // set namespace
14 val database = mongoClient.getDatabase("sample_airbnb")
15 val collection = database.getCollection<Document>("listingsAndReviews")
16
17 runBlocking {
18 // define pipeline
19 val agg = Document(
20 "\$search",
21 Document("index", "geo-json-tutorial")
22 .append(
23 "compound",
24 Document(
25 "must", listOf(
26 Document(
27 "geoWithin",
28 Document(
29 "geometry",
30 Document("type", "Polygon")
31 .append(
32 "coordinates",
33 listOf(
34 listOf(
35 listOf(-161.323242, 22.512557),
36 listOf(-152.446289, 22.065278),
37 listOf(-156.09375, 17.811456),
38 listOf(-161.323242, 22.512557)
39 )
40 )
41 )
42 )
43 .append("path", "address.location")
44 )
45 )
46 )
47 .append(
48 "should", listOf(
49 Document(
50 "text",
51 Document("path", "property_type")
52 .append("query", "Condominium")
53 )
54 )
55 )
56 )
57 )
58
59 // run pipeline and print results
60 val resultsFlow = collection.aggregate<Document>(
61 listOf(
62 agg,
63 limit(10),
64 project(fields(
65 excludeId(),
66 include("name", "address", "property_type"),
67 computed("score", Document("\$meta", "searchScore"))
68 ))
69 )
70 )
71 resultsFlow.collect { println(it) }
72 }
73 mongoClient.close()
74}
4

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

5

IDE でGeoQuery.ktプログラムを実行すると、次のドキュメントが出力されます。

Document{{name=Ocean View Waikiki Marina w/prkg, property_type=Condominium, address=Document{{street=Honolulu, HI, United States, suburb=Oʻahu, government_area=Primary Urban Center, market=Oahu, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-157.83919, 21.28634], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!, property_type=Condominium, address=Document{{street=Lahaina, HI, United States, suburb=Maui, government_area=Lahaina, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.68012, 20.96996], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=Makaha Valley Paradise with OceanView, property_type=Condominium, address=Document{{street=Waianae, HI, United States, suburb=Leeward Side, government_area=Waianae, market=Oahu, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-158.20291, 21.4818], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=March 2019 availability! Oceanview on Sugar Beach!, property_type=Condominium, address=Document{{street=Kihei, HI, United States, suburb=Maui, government_area=Kihei-Makena, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.46881, 20.78621], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=Tropical Jungle Oasis, property_type=Condominium, address=Document{{street=Hilo, HI, United States, suburb=Island of Hawaiʻi, government_area=South Hilo, market=The Big Island, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-155.09259, 19.73108], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=2 Bdrm/2 Bath Family Suite Ocean View, property_type=Condominium, address=Document{{street=Honolulu, HI, United States, suburb=Waikiki, government_area=Primary Urban Center, market=Oahu, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-157.82696, 21.27971], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=302 Kanai A Nalu Ocean front/view, property_type=Condominium, address=Document{{street=Wailuku, HI, United States, suburb=Maui, government_area=Kihei-Makena, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.5039, 20.79664], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=Sugar Beach Resort 1BR Ground Floor Condo !, property_type=Condominium, address=Document{{street=Kihei, HI, United States, suburb=Maui, government_area=Kihei-Makena, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.46697, 20.78484], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=2 BR Oceanview - Great Location!, property_type=Condominium, address=Document{{street=Kihei, HI, United States, suburb=Kihei/Wailea, government_area=Kihei-Makena, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.44917, 20.73013], is_location_exact=true}}}}, score=2.238388776779175}}
Document{{name=PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC, property_type=Condominium, address=Document{{street=Kihei, HI, United States, suburb=Maui, government_area=Kihei-Makena, market=Maui, country=United States, country_code=US, location=Document{{type=Point, coordinates=[-156.4409, 20.69735], is_location_exact=true}}}}, score=2.238388776779175}}
1
2

次のコード例では、次を行います。

  • MongoDB の Node.js ドライバーであるmongodbをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

    • 複合$searchステージを使用して次の操作を行います。

      • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

      • タイプcondominiumのプロパティの結果を優先します。

    • $projectステージを使用して次の操作を行います。

      • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

      • 返された各ドキュメントに関連性scoreを追加します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

    1const { MongoClient } = require("mongodb");
    2
    3// connect to your Atlas cluster
    4const uri ="<connection-string>";
    5
    6const client = new MongoClient(uri);
    7
    8async function run() {
    9 try {
    10 await client.connect();
    11
    12 // set namespace
    13 const database = client.db("sample_airbnb");
    14 const coll = database.collection("listingsAndReviews");
    15
    16 // define pipeline
    17 const agg = [
    18 {
    19 '$search': {
    20 'index': 'geo-json-tutorial',
    21 'compound': {
    22 'must': [
    23 {
    24 'geoWithin': {
    25 'geometry': {
    26 'type': 'Polygon',
    27 'coordinates': [
    28 [
    29 [
    30 -161.323242, 22.512557
    31 ], [
    32 -152.446289, 22.065278
    33 ], [
    34 -156.09375, 17.811456
    35 ], [
    36 -161.323242, 22.512557
    37 ]
    38 ]
    39 ]
    40 },
    41 'path': 'address.location'
    42 }
    43 }
    44 ],
    45 'should': [
    46 {
    47 'text': {
    48 'path': 'property_type',
    49 'query': 'Condominium'
    50 }
    51 }
    52 ]
    53 }
    54 }
    55 }, {
    56 '$limit': 10
    57 }, {
    58 '$project': {
    59 '_id': 0,
    60 'name': 1,
    61 'address': 1,
    62 'property_type': 1,
    63 'score': {
    64 '$meta': 'searchScore'
    65 }
    66 }
    67 }
    68 ];
    69 // run pipeline
    70 const result = await coll.aggregate(agg);
    71
    72 // print results
    73 await result.forEach((doc) => console.log(doc));
    74 } finally {
    75 await client.close();
    76 }
    77}
    78run().catch(console.dir);
3

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4

次のコマンドを実行して、コレクションをクエリします。

node run-geo-query.js
{
name: 'Ocean View Waikiki Marina w/prkg',
property_type: 'Condominium',
address: {
street: 'Honolulu, HI, United States',
suburb: 'Oʻahu',
government_area: 'Primary Urban Center',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -157.83919, 21.28634 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!',
property_type: 'Condominium',
address: {
street: 'Lahaina, HI, United States',
suburb: 'Maui',
government_area: 'Lahaina',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.68012, 20.96996 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Makaha Valley Paradise with OceanView',
property_type: 'Condominium',
address: {
street: 'Waianae, HI, United States',
suburb: 'Leeward Side',
government_area: 'Waianae',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -158.20291, 21.4818 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'March 2019 availability! Oceanview on Sugar Beach!',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.46881, 20.78621 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Tropical Jungle Oasis',
property_type: 'Condominium',
address: {
street: 'Hilo, HI, United States',
suburb: 'Island of Hawaiʻi',
government_area: 'South Hilo',
market: 'The Big Island',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -155.09259, 19.73108 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '2 Bdrm/2 Bath Family Suite Ocean View',
property_type: 'Condominium',
address: {
street: 'Honolulu, HI, United States',
suburb: 'Waikiki',
government_area: 'Primary Urban Center',
market: 'Oahu',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -157.82696, 21.27971 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '302 Kanai A Nalu Ocean front/view',
property_type: 'Condominium',
address: {
street: 'Wailuku, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.5039, 20.79664 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'Sugar Beach Resort 1BR Ground Floor Condo !',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.46697, 20.78484 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: '2 BR Oceanview - Great Location!',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Kihei/Wailea',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.44917, 20.73013 ],
is_location_exact: true
}
},
score: 2.238388776779175
},
{
name: 'PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC',
property_type: 'Condominium',
address: {
street: 'Kihei, HI, United States',
suburb: 'Maui',
government_area: 'Kihei-Makena',
market: 'Maui',
country: 'United States',
country_code: 'US',
location: {
type: 'Point',
coordinates: [ -156.4409, 20.69735 ],
is_location_exact: true
}
},
score: 2.238388776779175
}
1
2

次のコード例では、次を行います。

  • pymongo、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongoAtlas に接続するために必要なdns モジュールをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

    • 複合$searchステージを使用して次の操作を行います。

      • 結果mustcoordinatesのセットで定義されたPolygon内にあることを指定します。

      • タイプcondominiumのプロパティの結果を優先します。

    • $projectステージを使用して次の操作を行います。

      • すべてのフィールドを除外しますnameaddressproperty_typeを除く)。

      • 返された各ドキュメントに関連性scoreを追加します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

    1import pymongo
    2
    3# connect to your Atlas cluster
    4client = pymongo.MongoClient('<connection-string>')
    5
    6# define pipeline
    7pipeline = [
    8 {
    9 '$search': {
    10 'index': 'geo-json-tutorial',
    11 'compound': {
    12 'must': [
    13 {
    14 'geoWithin': {
    15 'geometry': {
    16 'type': 'Polygon',
    17 'coordinates': [
    18 [
    19 [
    20 -161.323242, 22.512557
    21 ], [
    22 -152.446289, 22.065278
    23 ], [
    24 -156.09375, 17.811456
    25 ], [
    26 -161.323242, 22.512557
    27 ]
    28 ]
    29 ]
    30 },
    31 'path': 'address.location'
    32 }
    33 }
    34 ],
    35 'should': [
    36 {
    37 'text': {
    38 'path': 'property_type',
    39 'query': 'Condominium'
    40 }
    41 }
    42 ]
    43 }
    44 }
    45 }, {
    46 '$limit': 10
    47 }, {
    48 '$project': {
    49 '_id': 0,
    50 'name': 1,
    51 'address': 1,
    52 'property_type': 1,
    53 'score': {
    54 '$meta': 'searchScore'
    55 }
    56 }
    57 }
    58]
    59# run pipeline
    60result = client["sample_airbnb"]["listingsAndReviews"].aggregate(pipeline)
    61
    62# print results
    63for i in result:
    64 print(i)
3

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4
python run-geo-query.py
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Primary Urban Center",
"location": {
"coordinates": [
-157.83919,
21.28634
],
"is_location_exact": true,
"type": "Point"
},
"market": "Oahu",
"street": "Honolulu, HI, United States",
"suburb": "O\u02bbahu"
},
"name": "Ocean View Waikiki Marina w/prkg",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Lahaina",
"location": {
"coordinates": [
-156.68012,
20.96996
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Lahaina, HI, United States",
"suburb": "Maui"
},
"name": "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Waianae",
"location": {
"coordinates": [
-158.20291,
21.4818
],
"is_location_exact": true,
"type": "Point"
},
"market": "Oahu",
"street": "Waianae, HI, United States",
"suburb": "Leeward Side"
},
"name": "Makaha Valley Paradise with OceanView",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Kihei-Makena",
"location": {
"coordinates": [
-156.46881,
20.78621
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Kihei, HI, United States",
"suburb": "Maui"
},
"name": "March 2019 availability! Oceanview on Sugar Beach!",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "South Hilo",
"location": {
"coordinates": [
-155.09259,
19.73108
],
"is_location_exact": true,
"type": "Point"
},
"market": "The Big Island",
"street": "Hilo, HI, United States",
"suburb": "Island of Hawai\u02bbi"
},
"name": "Tropical Jungle Oasis",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Primary Urban Center",
"location": {
"coordinates": [
-157.82696,
21.27971
],
"is_location_exact": true,
"type": "Point"
},
"market": "Oahu",
"street": "Honolulu, HI, United States",
"suburb": "Waikiki"
},
"name": "2 Bdrm/2 Bath Family Suite Ocean View",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Kihei-Makena",
"location": {
"coordinates": [
-156.5039,
20.79664
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Wailuku, HI, United States",
"suburb": "Maui"
},
"name": "302 Kanai A Nalu Ocean front/view",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Kihei-Makena",
"location": {
"coordinates": [
-156.46697,
20.78484
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Kihei, HI, United States",
"suburb": "Maui"
},
"name": "Sugar Beach Resort 1BR Ground Floor Condo !",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Kihei-Makena",
"location": {
"coordinates": [
-156.44917,
20.73013
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Kihei, HI, United States",
"suburb": "Kihei/Wailea"
},
"name": "2 BR Oceanview - Great Location!",
"property_type": "Condominium",
"score": 2.238388776779175
}
{
"address": {
"country": "United States",
"country_code": "US",
"government_area": "Kihei-Makena",
"location": {
"coordinates": [
-156.4409,
20.69735
],
"is_location_exact": true,
"type": "Point"
},
"market": "Maui",
"street": "Kihei, HI, United States",
"suburb": "Maui"
},
"name": "PALMS AT WAILEA #905-2BR-REMODELED-LARGE LANAI-AC",
"property_type": "Condominium",
"score": 2.238388776779175
}

戻る

発音区別符号の区別なし