如何迭代游标以查看所有结果
本教程介绍如何通过迭代游标直到耗尽来返回 Atlas Search 查询的所有结果。 默认情况下,某些 Atlas Search 客户端(例如 mongosh
和 MongoDB Compass)最多会打印结果中的前20文档。 要一次性查看所有结果,我们建议您迭代游标直到耗尽。 为了演示如何遍历游标以查看所有结果,本教程将引导您完成以下步骤:
为
sample_mflix.movies
集合设置具有动态映射 的 Atlas Search 索引。运行 Atlas Search 查询,迭代游标直到耗尽,以检索在
title
字段中包含术语summer
的所有文档。
要创建 Atlas Search 索引,您必须拥有 Project Data Access Admin
或更高的项目访问权限。
创建 Atlas Search 索引
在本节中,您将创建一个 Atlas Search 索引,该索引使用动态映射对 sample_mflix.movies
集合中的所有可动态索引字段动态创建索引。
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 字段中输入
iterate-cursor-tutorial
。如果将索引命名为
default
,则在使用 $search 管道阶段时无需指定index
参数。如果您为索引指定了自定义名称,则必须在index
参数中指定此名称。在 Database and Collection(数据库和集合)部分中找到
sample_mflix
数据库,然后选择movies
集合。
指定索引定义。
以下索引定义对集合中的支持类型字段动态创建索引。您可以使用 Atlas Search Visual Editor 或 Atlas Search JSON Editor 在 Atlas 用户界面中创建索引。
单击 Next(连接)。
查看集合的默认索引定义。
单击 Next(连接)。
查看索引定义。
索引定义应类似于以下内容:
{ "mappings": { "dynamic": true } } 单击 Next(连接)。
运行示例查询
➤ 使用“选择语言”下拉菜单选择要用于在此页面上运行示例查询的 MongoDB 客户端。
在本部分中,您将连接到 Atlas 集群并针对 sample_mflix.movies
集合中的 title
字段运行查询,以使用文本操作符搜索术语 Summer
。该集合包含超过 75 个标题中包含术语 Summer
的文档,但默认情况下,某些 Atlas Search 客户端将仅打印查询的前 20 个结果。
要一次性查看查询词的所有结果,可遍历游标,直到耗尽游标。
使用 mongosh
连接到集群。
在终端窗口中打开mongosh
并连接到集群。 有关连接的详细说明,请参阅通过mongosh
连接。
使用 sample_mflix
数据库。
在 mongosh
提示符下运行以下命令:
use sample_mflix
switched to db sample_mflix
对 movies
集合运行以下 Atlas Search 查询。
在以下查询中,使用 toArray() 方法迭代游标,并返回数组中与查询条件匹配的文档。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "iterate-cursor-tutorial", 5 "text": { 6 "query": "summer", 7 "path": "title" 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 0, 14 "title": 1 15 } 16 } 17 ]).toArray()
1 [ 2 { title: 'Summer' }, 3 { title: 'Summer Stock' }, 4 { title: 'Violent Summer' }, 5 { title: 'Indian Summer' }, 6 { title: 'Indian Summer' }, 7 { title: 'Summer Rental' }, 8 { title: 'Summer Things' }, 9 { title: 'Wolf Summer' }, 10 { title: 'Summer Storm' }, 11 { title: 'Summer Palace' }, 12 { title: 'Eternal Summer' }, 13 { title: 'Summer Holiday' }, 14 { title: 'Summer Wars' }, 15 { title: 'Summer Games' }, 16 { title: 'Summer Nights' }, 17 { title: 'A Summer Place' }, 18 { title: 'Summer and Smoke' }, 19 { title: 'The Endless Summer' }, 20 { title: "Summer of '42" }, 21 { title: 'That Certain Summer' }, 22 { title: 'One Deadly Summer' }, 23 { title: 'Summer Camp Nightmare' }, 24 { title: 'An Unforgettable Summer' }, 25 { title: 'Summer of Sam' }, 26 { title: 'Bullets Over Summer' }, 27 { title: 'Summer in Berlin' }, 28 { title: 'A Plumm Summer' }, 29 { title: 'Summer Heights High' }, 30 { title: 'Summer of Goliath' }, 31 { title: 'Red Hook Summer' }, 32 { title: 'Ping Pong Summer' }, 33 { title: 'Summer of Blood' }, 34 { title: 'The End of Summer' }, 35 { title: 'Summer Wishes, Winter Dreams' }, 36 { title: "A Summer at Grandpa's" }, 37 { title: 'Cold Summer of 1953' }, 38 { title: 'A Brighter Summer Day' }, 39 { title: 'Summer of the Monkeys' }, 40 { title: 'A Storm in Summer' }, 41 { title: 'Wet Hot American Summer' }, 42 { title: 'My Summer of Love' }, 43 { title: 'Nasu: Summer in Andalusia' }, 44 { title: 'A Summer in Genoa' }, 45 { title: '(500) Days of Summer' }, 46 { title: 'Summer Days with Coo' }, 47 { title: 'The Kings of Summer' }, 48 { title: 'May in the Summer' }, 49 { title: 'A Horse for Summer' }, 50 { title: 'The Summer of Sangaile' }, 51 { title: 'Smiles of a Summer Night' }, 52 { title: 'Shadows of a Hot Summer' }, 53 { title: 'That Summer of White Roses' }, 54 { title: 'Last Summer in the Hamptons' }, 55 { title: 'A Summer in La Goulette' }, 56 { title: 'A Summer by the River' }, 57 { title: 'Summer in the Golden Valley' }, 58 { title: 'How I Ended This Summer' }, 59 { title: 'And They Call It Summer' }, 60 { title: 'Spring, Summer, Fall, Winter... and Spring' }, 61 { title: 'The Last Summer of La Boyita' }, 62 { title: 'The Mafia Only Kills in Summer' }, 63 { title: 'I Know What You Did Last Summer' }, 64 { title: 'I Know What You Did Last Summer' }, 65 { title: 'Judy Moody and the Not Bummer Summer' }, 66 { title: 'I Still Know What You Did Last Summer' } 67 ]
在以下查询中,使用forEach()方法迭代游标,并将 JavaScript 函数printjson
应用于每个文档。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "iterate-cursor-tutorial", 5 "text": { 6 "query": "summer", 7 "path": "title" 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 0, 14 "title": 1 15 } 16 } 17 ]).forEach(printjson)
1 { 2 title: 'Summer' 3 } 4 { 5 title: 'Summer Stock' 6 } 7 { 8 title: 'Violent Summer' 9 } 10 { 11 title: 'Indian Summer' 12 } 13 { 14 title: 'Indian Summer' 15 } 16 { 17 title: 'Summer Rental' 18 } 19 { 20 title: 'Summer Things' 21 } 22 { 23 title: 'Wolf Summer' 24 } 25 { 26 title: 'Summer Storm' 27 } 28 { 29 title: 'Summer Palace' 30 } 31 { 32 title: 'Eternal Summer' 33 } 34 { 35 title: 'Summer Holiday' 36 } 37 { 38 title: 'Summer Wars' 39 } 40 { 41 title: 'Summer Games' 42 } 43 { 44 title: 'Summer Nights' 45 } 46 { 47 title: 'A Summer Place' 48 } 49 { 50 title: 'Summer and Smoke' 51 } 52 { 53 title: 'The Endless Summer' 54 } 55 { 56 title: "Summer of '42" 57 } 58 { 59 title: 'That Certain Summer' 60 } 61 { 62 title: 'One Deadly Summer' 63 } 64 { 65 title: 'Summer Camp Nightmare' 66 } 67 { 68 title: 'An Unforgettable Summer' 69 } 70 { 71 title: 'Summer of Sam' 72 } 73 { 74 title: 'Bullets Over Summer' 75 } 76 { 77 title: 'Summer in Berlin' 78 } 79 { 80 title: 'A Plumm Summer' 81 } 82 { 83 title: 'Summer Heights High' 84 } 85 { 86 title: 'Summer of Goliath' 87 } 88 { 89 title: 'Red Hook Summer' 90 } 91 { 92 title: 'Ping Pong Summer' 93 } 94 { 95 title: 'Summer of Blood' 96 } 97 { 98 title: 'The End of Summer' 99 } 100 { 101 title: 'Summer Wishes, Winter Dreams' 102 } 103 { 104 title: "A Summer at Grandpa's" 105 } 106 { 107 title: 'Cold Summer of 1953' 108 } 109 { 110 title: 'A Brighter Summer Day' 111 } 112 { 113 title: 'Summer of the Monkeys' 114 } 115 { 116 title: 'A Storm in Summer' 117 } 118 { 119 title: 'Wet Hot American Summer' 120 } 121 { 122 title: 'My Summer of Love' 123 } 124 { 125 title: 'Nasu: Summer in Andalusia' 126 } 127 { 128 title: 'A Summer in Genoa' 129 } 130 { 131 title: '(500) Days of Summer' 132 } 133 { 134 title: 'Summer Days with Coo' 135 } 136 { 137 title: 'The Kings of Summer' 138 } 139 { 140 title: 'May in the Summer' 141 } 142 { 143 title: 'A Horse for Summer' 144 } 145 { 146 title: 'The Summer of Sangaile' 147 } 148 { 149 title: 'Smiles of a Summer Night' 150 } 151 { 152 title: 'Shadows of a Hot Summer' 153 } 154 { 155 title: 'That Summer of White Roses' 156 } 157 { 158 title: 'Last Summer in the Hamptons' 159 } 160 { 161 title: 'A Summer in La Goulette' 162 } 163 { 164 title: 'A Summer by the River' 165 } 166 { 167 title: 'Summer in the Golden Valley' 168 } 169 { 170 title: 'How I Ended This Summer' 171 } 172 { 173 title: 'And They Call It Summer' 174 } 175 { 176 title: 'Spring, Summer, Fall, Winter... and Spring' 177 } 178 { 179 title: 'The Last Summer of La Boyita' 180 } 181 { 182 title: 'The Mafia Only Kills in Summer' 183 } 184 { 185 title: 'I Know What You Did Last Summer' 186 } 187 { 188 title: 'I Know What You Did Last Summer' 189 } 190 { 191 title: 'Judy Moody and the Not Bummer Summer' 192 } 193 { 194 title: 'I Still Know What You Did Last Summer' 195 }
注意
默认情况下,MongoDB Compass 将显示前 10 个结果。
在 MongoDB Compass 中连接到您的集群。
打开 MongoDB Compass 并连接到您的集群。有关连接的详细说明,请参阅通过 Compass 连接。
对 movies
集合运行以下 Atlas Search 查询。
以下查询使用 $search
管道阶段查询该集合。
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
管道阶段查询$search
{ "index": "iterate-cursor-tutorial", "text": { "query": "Summer", "path": "title" } } $project
{ "id": 0, "title": 1 } 在右上角,单击 Export。
为 Export File Type 选择 JSON。
单击 Export...(连接)。
打开 JSON文件,查看结果中的所有文档:
1 [{ 2 "title": "Summer" 3 }, 4 { 5 "title": "Summer Stock" 6 }, 7 { 8 "title": "Violent Summer" 9 }, 10 { 11 "title": "Indian Summer" 12 }, 13 { 14 "title": "Indian Summer" 15 }, 16 { 17 "title": "Summer Rental" 18 }, 19 { 20 "title": "Summer Things" 21 }, 22 { 23 "title": "Wolf Summer" 24 }, 25 { 26 "title": "Summer Storm" 27 }, 28 { 29 "title": "Summer Palace" 30 }, 31 { 32 "title": "Eternal Summer" 33 }, 34 { 35 "title": "Summer Holiday" 36 }, 37 { 38 "title": "Summer Wars" 39 }, 40 { 41 "title": "Summer Games" 42 }, 43 { 44 "title": "Summer Nights" 45 }, 46 { 47 "title": "A Summer Place" 48 }, 49 { 50 "title": "Summer and Smoke" 51 }, 52 { 53 "title": "The Endless Summer" 54 }, 55 { 56 "title": "Summer of '42" 57 }, 58 { 59 "title": "That Certain Summer" 60 }, 61 { 62 "title": "One Deadly Summer" 63 }, 64 { 65 "title": "Summer Camp Nightmare" 66 }, 67 { 68 "title": "An Unforgettable Summer" 69 }, 70 { 71 "title": "Summer of Sam" 72 }, 73 { 74 "title": "Bullets Over Summer" 75 }, 76 { 77 "title": "Summer in Berlin" 78 }, 79 { 80 "title": "A Plumm Summer" 81 }, 82 { 83 "title": "Summer Heights High" 84 }, 85 { 86 "title": "Summer of Goliath" 87 }, 88 { 89 "title": "Red Hook Summer" 90 }, 91 { 92 "title": "Ping Pong Summer" 93 }, 94 { 95 "title": "Summer of Blood" 96 }, 97 { 98 "title": "The End of Summer" 99 }, 100 { 101 "title": "Summer Wishes, Winter Dreams" 102 }, 103 { 104 "title": "A Summer at Grandpa's" 105 }, 106 { 107 "title": "Cold Summer of 1953" 108 }, 109 { 110 "title": "A Brighter Summer Day" 111 }, 112 { 113 "title": "Summer of the Monkeys" 114 }, 115 { 116 "title": "A Storm in Summer" 117 }, 118 { 119 "title": "Wet Hot American Summer" 120 }, 121 { 122 "title": "My Summer of Love" 123 }, 124 { 125 "title": "Nasu: Summer in Andalusia" 126 }, 127 { 128 "title": "A Summer in Genoa" 129 }, 130 { 131 "title": "(500) Days of Summer" 132 }, 133 { 134 "title": "Summer Days with Coo" 135 }, 136 { 137 "title": "The Kings of Summer" 138 }, 139 { 140 "title": "May in the Summer" 141 }, 142 { 143 "title": "A Horse for Summer" 144 }, 145 { 146 "title": "The Summer of Sangaile" 147 }, 148 { 149 "title": "Smiles of a Summer Night" 150 }, 151 { 152 "title": "Shadows of a Hot Summer" 153 }, 154 { 155 "title": "That Summer of White Roses" 156 }, 157 { 158 "title": "Last Summer in the Hamptons" 159 }, 160 { 161 "title": "A Summer in La Goulette" 162 }, 163 { 164 "title": "A Summer by the River" 165 }, 166 { 167 "title": "Summer in the Golden Valley" 168 }, 169 { 170 "title": "How I Ended This Summer" 171 }, 172 { 173 "title": "And They Call It Summer" 174 }, 175 { 176 "title": "Spring, Summer, Fall, Winter... and Spring" 177 }, 178 { 179 "title": "The Last Summer of La Boyita" 180 }, 181 { 182 "title": "The Mafia Only Kills in Summer" 183 }, 184 { 185 "title": "I Know What You Did Last Summer" 186 }, 187 { 188 "title": "I Know What You Did Last Summer" 189 }, 190 { 191 "title": "Judy Moody and the Not Bummer Summer" 192 }, 193 { 194 "title": "I Still Know What You Did Last Summer" 195 }]