如何运行 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(集群)。
显示 集群页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer 或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击 Services 标题下的 Atlas Search。
从 Select data source 下拉菜单中选择您的集群并单击 Go to Atlas Search。
将显示 Atlas Search 页面。
单击集群的对应 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 用户界面中的 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(集群)。
会显示集群页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer 或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击 Services 标题下的 Atlas Search。
从 Select data source 下拉菜单中选择您的集群并单击 Go to Atlas Search。
将显示 Atlas Search 页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击该集合的 Search Indexes 标签页。
将显示 Atlas Search 页面。
单击集群的名称。
单击 Atlas Search 标签页。
将显示 Atlas Search 页面。
使用 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 }