Atlas Search 복합 Geo JSON 쿼리를 실행하는 방법
이 튜토리얼에서는 sample_airbnb
데이터베이스의 listingsAndReviews
컬렉션에 대한 인덱스를 생성하고 지정된 내의 각 속성에 대해 name
, address
, property_type
이 포함된 문서를 반환하는 쿼리를 실행하는 방법을 설명합니다. coordinates
을 사용하여 정의된 다각형입니다.
이 튜토리얼에서는 다음 단계를 안내합니다:
Atlas Search 인덱스를
sample_airbnb.listingsAndReviews
컬렉션의address
필드에 생성합니다.지정된 지리적
coordinates
내에서 각 속성의name
,address
,property_type
가 포함된 문서 10개를 반환하는 쿼리를 실행합니다. Atlas Search 결과는condominium
유형의 속성에 대한 기본 설정을 반영하며, 결과의 각 문서에는 관련성score
이 할당되어 가장 높은 것부터 낮은 것 순으로 반환됩니다.
시작하기 전에 Atlas 클러스터가 필수 구성 요소에 설명된 요건을 충족하는지 확인하세요.
Atlas Search 인덱스를 생성하려면 프로젝트에 대한 Project Data Access Admin
이상의 액세스 권한이 있어야 합니다.
Atlas Search 인덱스 만들기
이 섹션에서는 sample_airbnb.listingsAndReviews
collection의 address
필드에 Atlas Search 검색 인덱스를 생성합니다.
Atlas Clusters 에서 프로젝트 의 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters 을(를) 클릭합니다.
클러스터 페이지가 표시됩니다.
클러스터의 Atlas Search 페이지로 이동합니다.
사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.
사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.
Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.
Atlas Search 페이지가 표시됩니다.
cluster의 Browse Collections 버튼을 클릭합니다.
데이터베이스를 확장하고 컬렉션을 선택합니다.
컬렉션의 Search Indexes 탭을 클릭합니다.
Atlas Search 페이지가 표시됩니다.
클러스터 이름을 클릭합니다.
Atlas Search 탭을 클릭합니다.
Atlas Search 페이지가 표시됩니다.
Index Name을(를) 입력하고 을(를) 설정하다 Database and Collection 합니다.
Index Name 필드에
geo-json-tutorial
를 입력합니다.인덱스 이름을
default
로 지정하면 $search 파이프라인 단계에서index
매개변수를 지정할 필요가 없습니다. 인덱스에 사용자 지정 이름을 지정하는 경우index
매개변수에 이 이름을 지정해야 합니다.Database and Collection 섹션에서
sample_airbnb
데이터베이스를 찾고listingsAndReviews
컬렉션을 선택합니다.
필드 address
에 인덱스 를 정의합니다.
Atlas user 인터페이스에서 Atlas Search Visual Editor 또는 Atlas Search JSON Editor 을(를) 사용하여 인덱스를 생성할 수 있습니다. 다음 인덱스 정의는 Atlas Search가 인덱싱해야 함을 지정합니다.
collection의 모든 필드가 자동으로 생성됩니다.
geo
유형인document
의address.location
필드입니다.
Next를 클릭합니다.
Refine Your Index를 클릭합니다.
Field Mappings 섹션에서 Add Field를 클릭하여 Add Field Mapping > Customized Configuration 탭을 엽니다.
Field Name 드롭다운 메뉴에서 address.location을(를) 선택합니다.
Data Type 드롭다운을 클릭하여 Geo를 선택합니다.
Add를 클릭합니다.
Save Changes를 클릭합니다.
기본 인덱스 정의를 다음 예제 인덱스 정의로 바꿉니다.
{ "mappings": { "dynamic": true, "fields": { "address": { "fields": { "location": { "type": "geo" } }, "type": "document" } } } } Next를 클릭합니다.
지역, 숫자 및 텍스트 필드 결합 쿼리 실행
➤ 이 페이지의 언어 선택 드롭다운 메뉴를 사용하여 이 섹션에 있는 예시의 언어를 설정합니다.
이 섹션에서는 지정된 지리적 coordinates
내 각 속성에 대해 name
, address
, property_type
이 포함된 문서 10개를 반환하는 쿼리를 실행합니다. 각 문서 score
를 지정하는 필드도 반환되며, 결과는 condominium
유형의 속성에 대한 기본 설정으로 정렬됩니다.
Atlas Clusters 에서 프로젝트 의 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters 을(를) 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
클러스터의 Atlas Search 페이지로 이동합니다.
사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.
사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.
Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.
Atlas Search 페이지가 표시됩니다.
cluster의 Browse Collections 버튼을 클릭합니다.
데이터베이스를 확장하고 컬렉션을 선택합니다.
컬렉션의 Search Indexes 탭을 클릭합니다.
Atlas Search 페이지가 표시됩니다.
클러스터 이름을 클릭합니다.
Atlas Search 탭을 클릭합니다.
Atlas Search 페이지가 표시됩니다.
Run an Atlas Search compound query with the geoWithin
operator on the sample_airbnb.listingsAndReviews
collection.
다음 Atlas Search 검색 쿼리는 복합 연산자 를 사용하여 다음을 수행합니다.
결과
must
가coordinates
세트에 의해 정의된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" } }] } } } ]
1 SCORE: 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 24 SCORE: 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 46 SCORE: 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 68 SCORE: 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 90 SCORE: 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 112 SCORE: 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 134 SCORE: 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 156 SCORE: 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 178 SCORE: 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 200 SCORE: 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 ...
에서 클러스터 mongosh
에 연결합니다.
터미널 창에서 mongosh
를 열고 클러스터에 연결합니다. 연결에 대한 자세한 지침은 mongosh
를 통한 연결을 참조하세요.
sample_airbnb
데이터베이스 를 사용합니다.
mongosh
프롬프트에서 다음 명령을 실행합니다.
use sample_airbnb
Run the combined Atlas Search query in the mongosh
.
다음 Atlas Search 쿼리:
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_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 } ]
MongoDB Compass에서 cluster에 연결합니다.
MongoDB Compass를 열고 cluster에 연결합니다. 연결에 대한 자세한 내용은 Compass를 통한 연결을 참조하세요.
Run an Atlas Search query on the listingsAndReviews
collection.
다음 쿼리입니다:
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_type
를 제외한 모든 필드를 제외합니다.반환된 각 문서에 관련성
score
을 추가합니다.
MongoDB Compass에서 이 Atlas Search 쿼리를 실행하려면 다음을 수행합니다.
Aggregations 탭을 클릭합니다.
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 서버 매뉴얼을 참조하시기 바랍니다.
파일 에 쿼리 Program.cs
를 만듭니다.
Program.cs
파일의 내용을 다음 코드로 바꿉니다.다음 Atlas Search 쿼리:
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_type
를 제외한 모든 필드를 제외합니다.반환된 각 문서에 관련성
score
을 추가합니다.
1 using MongoDB.Bson; 2 using MongoDB.Bson.IO; 3 using MongoDB.Bson.Serialization; 4 using MongoDB.Bson.Serialization.Attributes; 5 using MongoDB.Bson.Serialization.Conventions; 6 using MongoDB.Driver; 7 using MongoDB.Driver.GeoJsonObjectModel; 8 using MongoDB.Driver.Search; 9 using System; 10 11 public 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 [ ]59 public class AirbnbDocument 60 { 61 [ ]62 public ObjectId Id { get; set; } 63 public String Name { get; set; } 64 [ ]65 public string PropertyType { get; set; } 66 public Address Address { get; set; } 67 public double Score { get; set; } 68 } 69 [ ]70 public class Address 71 { 72 public GeoJsonPoint<GeoJson2DCoordinates> Location { get; set; } 73 } 샘플을 실행하기 전에
<connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
파일 을 컴파일하고 Program.cs
실행 합니다.
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 }
코드 예시 를 복사하여 run-geo-query.go
파일 에 붙여넣습니다.
다음 코드 예제에서는:
mongodb
패키지 및 종속성을 가져옵니다.Atlas 클러스터에 대한 연결을 설정합니다.
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_type
를 제외한 모든 필드를 제외합니다.반환된 각 문서에 관련성
score
을 추가합니다.
커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.
1 package main 2 3 import ( 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 12 func 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 }
Replace the <connection-string>
with your Atlas connection string.
샘플을 실행하기 전에 <connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
파일 을 컴파일하고 run-geo-query.go
실행 합니다.
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}]
코드 예시 를 복사하여 GeoQuery.java
파일 에 붙여넣습니다.
다음 코드 예제에서는:
mongodb
패키지 및 종속성을 가져옵니다.Atlas 클러스터에 대한 연결을 설정합니다.
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_type
를 제외한 모든 필드를 제외합니다.반환된 각 문서에 관련성
score
을 추가합니다.
- 커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.
- 호출합니다.
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.computed; 6 import static com.mongodb.client.model.Projections.excludeId; 7 import static com.mongodb.client.model.Projections.fields; 8 import static com.mongodb.client.model.Projections.include; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public 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;
Replace the <connection-string>
with your Atlas connection string.
샘플을 실행하기 전에 <connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
파일 을 컴파일하고 GeoQuery.java
실행 합니다.
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}
코드 예시 를 복사하여 GeoQuery.kt
파일 에 붙여넣습니다.
다음 코드 예제에서는:
mongodb
패키지 및 종속성을 가져옵니다.Atlas 클러스터에 대한 연결을 설정합니다.
복합
$search
단계를 사용하여 다음을 수행합니다.결과
must
가coordinates
세트에 의해 정의된Polygon
내에 포함되도록 지정합니다.condominium
유형의 속성에 대한 결과에 우선 순위를 부여합니다.
$project
단계를 사용하여 다음을 수행합니다.name
,address
및property_type
를 제외한 모든 필드를 제외합니다.반환된 각 문서에 관련성
score
을 추가합니다.
AggregateFlow
인스턴스에서 쿼리와 일치하는 문서를 인쇄합니다.
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun 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 }
Replace the <connection-string>
with your Atlas connection string.
샘플을 실행하기 전에 <connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
파일 을 GeoQuery.kt
실행합니다.
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}}
다음 코드를 복사하여 run-geo-query.js
파일 에 붙여넣습니다.
다음 코드 예제에서는:
MongoDB의 Node.js 드라이버인
mongodb
를 가져옵니다.MongoClient
클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas cluster 4 const uri ="<connection-string>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 78 run().catch(console.dir);
Replace the <connection-string>
with your Atlas connection string.
샘플을 실행하기 전에 <connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
컬렉션을 쿼리합니다.
다음 명령을 실행하여 컬렉션을 쿼리합니다.
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 }
다음 코드를 복사하여 run-geo-query.py
파일 에 붙여넣습니다.
다음 코드 예제에서는:
pymongo
, MongoDB의 Python 드라이버 및dns
모듈을 가져옵니다. 이 모듈은 DNS 시드 리스트 연결 문자열을 사용하여pymongo
를Atlas
에 연결하는 데 필요합니다.MongoClient
클래스의 인스턴스를 만들어 Atlas 클러스터에 대한 연결을 설정합니다.커서 위를 반복하여 쿼리와 일치하는 문서를 인쇄합니다.
1 import pymongo 2 3 # connect to your Atlas cluster 4 client = pymongo.MongoClient('<connection-string>') 5 6 # define pipeline 7 pipeline = [ 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 60 result = client["sample_airbnb"]["listingsAndReviews"].aggregate(pipeline) 61 62 # print results 63 for i in result: 64 print(i)
Replace the <connection-string>
with your Atlas connection string.
샘플을 실행하기 전에 <connection-string>
을 Atlas 연결 문자열로 바꿉니다. 연결 문자열에는 데이터베이스 사용자의 자격 증명이 포함되어 있어야 합니다. 자세한 내용은 드라이버를 통한 연결을 참조하세요.
컬렉션을 쿼리합니다.
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 }