如何运行 Atlas Search 复合地理 JSON 查询
本教程介绍如何在sample_airbnb
数据库中的listingsAndReviews
collection上创建索引,并运行查询以返回指定索引范围内每个property具有name
、 address
和property_type
的文档。使用coordinates
定义的多边形。
本教程将指导您完成以下步骤:
在
sample_airbnb.listingsAndReviews
集合的address
字段上设置 Atlas Search 索引。运行查询,返回 10 个文档,其中每个属性的
name
、address
和property_type
在指定地理coordinates
内。 Atlas Search 结果反映了对condominium
类型的属性偏好,并且为结果中的每个文档分配了相关性score
,按从高到低的顺序返回。
在开始之前,请确保您的 Atlas 集群满足先决条件中所述的要求。
要创建 Atlas Search 索引,您必须拥有 Project Data Access Admin
或更高的项目访问权限。
创建 Atlas Search 索引
在本部分中,您将在sample_airbnb.listingsAndReviews
collection中的address
字段上创建 Atlas Search 索引。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(集群)。
显示 集群页面。
输入 Index Name(索引名称),然后设置 Database and Collection(数据库和集合)。
在 Index Name 字段中输入
geo-json-tutorial
。如果将索引命名为
default
,则在使用 $search 管道阶段时无需指定index
参数。如果您为索引指定了自定义名称,则必须在index
参数中指定此名称。在 Database and Collection(数据库和集合)部分中找到
sample_airbnb
数据库,然后选择listingsAndReviews
集合。
在 address
字段上定义索引。
您可以使用 Atlas 用户界面中的 Atlas Search Visual Editor或 Atlas Search JSON Editor来创建索引。以下索引定义指定 Atlas Search 必须索引:
collection中的所有字段都会自动生成。
address.location
document
作为类型geo
的 的字段。
单击 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(连接)。
运行地理、数字和文本字段的组合查询
➤ 使用本页的“选择语言”下拉菜单设置本节示例的语言。
在本部分中,您将运行一个查询,为指定地理name
address
property_type
内的每个属性返回 10 个文档,其中每个属性具有 、 和coordinates
。还返回指定每个文档score
的字段,并优先考虑类型condominium
的属性对结果进行排序。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(集群)。
会显示集群页面。
使用 geoWithin
操作符对 sample_airbnb.listingsAndReviews
集合运行 Atlas Search 复合查询。
以下 Atlas Search 查询使用复合操作符执行以下操作:
指定结果
must
Polygon
位于由 集定义的coordinates
内。优先显示
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
在 mongosh
中运行合并的 Atlas Search 查询。
以下 Atlas Search 搜索查询:
使用复合
$search
阶段可以:指定结果
must
Polygon
位于由 集定义的coordinates
内。优先显示
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 中连接到您的集群。
打开 MongoDB Compass 并连接到您的集群。有关连接的详细说明,请参阅通过 Compass 连接。
对 listingsAndReviews
集合运行 Atlas Search 查询。
以下查询:
使用复合
$search
阶段可以:指定结果
must
Polygon
位于由 集定义的coordinates
内。优先显示
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
Polygon
位于由 集定义的coordinates
内。优先显示
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
Polygon
位于由 集定义的coordinates
内。优先显示
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 }
请将 <connection-string>
替换为 Atlas 连接字符串。
在运行示例之前,请将 <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
Polygon
位于由 集定义的coordinates
内。优先显示
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 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers;
请将 <connection-string>
替换为 Atlas 连接字符串。
在运行示例之前,请将 <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
Polygon
位于由 集定义的coordinates
内。优先显示
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 }
请将 <connection-string>
替换为 Atlas 连接字符串。
在运行示例之前,请将 <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
,即 MongoDB 的 Node.js 驱动程序。创建一个
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);
请将 <connection-string>
替换为 Atlas 连接字符串。
在运行示例之前,请将 <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)
请将 <connection-string>
替换为 Atlas 连接字符串。
在运行示例之前,请将 <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 }