How to Iterate Your Cursor to View All Results
This tutorial describes how to return all results for an Atlas Search query by
iterating your cursor until it is exhausted. By default, some Atlas Search
clients like mongosh
and MongoDB Compass print up to the first 20
documents in the results. To view all results at once, we recommend that
you iterate your cursor until it is exhausted. To demonstrate how to
iterate your cursor to view all results, this tutorial takes you through
the following steps:
Set up an Atlas Search index with dynamic mapping on the
sample_mflix.movies
collection.Run an Atlas Search query that iterates your cursor until it is exhausted to retrieve all documents that contain the term
summer
in thetitle
field.
To create an Atlas Search index, you must have Project Data Access Admin
or higher access to the project.
Create the Atlas Search Index
In this section, you create an Atlas Search index that uses dynamic
mapping to automatically index all the
dynamically indexable fields in the
sample_mflix.movies
collection.
In Atlas, go to the Clusters page for your project.
If it's not already displayed, select the organization that contains your desired project from the Organizations menu in the navigation bar.
If it's not already displayed, select your desired project from the Projects menu in the navigation bar.
If it's not already displayed, click Clusters in the sidebar.
The Clusters page displays.
Go to the Atlas Search page for your cluster.
You can go the Atlas Search page from the sidebar, the Data Explorer, or your cluster details page.
In the sidebar, click Atlas Search under the Services heading.
From the Select data source dropdown, select your cluster and click Go to Atlas Search.
The Atlas Search page displays.
Click the Browse Collections button for your cluster.
Expand the database and select the collection.
Click the Search Indexes tab for the collection.
The Atlas Search page displays.
Click the cluster's name.
Click the Atlas Search tab.
The Atlas Search page displays.
Enter the Index Name, and set the Database and Collection.
In the Index Name field, enter
iterate-cursor-tutorial
.If you name your index
default
, you don't need to specify anindex
parameter in the $search pipeline stage. If you give a custom name to your index, you must specify this name in theindex
parameter.In the Database and Collection section, find the
sample_mflix
database, and select themovies
collection.
Specify an index definition.
The following index definition dynamically indexes the fields of supported types in the collection. You can use the Atlas Search Visual Editor or the Atlas Search JSON Editor in the Atlas user interface to create the index.
Click Next.
Review the default index definition for the collection.
Click Next.
Review the index definition.
Your index definition should look similar to the following:
{ "mappings": { "dynamic": true } } Click Next.
Run the Sample Queries
➤ Use the Select your language drop-down menu to select the MongoDB client that you want to use to run the example queries on this page.
In this section, you connect to your Atlas cluster and run
queries against the title
field in the sample_mflix.movies
collection to search for the term Summer
with the text operator. The collection includes over 75 documents that
contain the term Summer
in the title, but by default, some Atlas Search
clients print only the top 20 results for the query.
To view all the results for the query term at once, you iterate through your cursor until you exhaust the cursor.
Connect to your cluster using mongosh
.
Open mongosh
in a terminal window and connect to your
cluster. For detailed instructions on connecting, see
Connect via mongosh
.
Use the sample_mflix
database.
Run the following command at mongosh
prompt:
use sample_mflix
switched to db sample_mflix
Run the following Atlas Search queries against the movies
collection.
In the following query, use the toArray() method to iterate the cursor and return the documents that match the query criteria in an array.
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 ]
In the following query, use the forEach() method to iterate the
cursor and apply the JavaScript function printjson
to
each document.
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 }
Note
By default, MongoDB Compass displays the first 10 results.
Connect to your cluster in MongoDB Compass.
Open MongoDB Compass and connect to your cluster. For detailed instructions on connecting, see Connect via Compass.
Run the following Atlas Search query against the movies
collection.
The following query uses the $search
pipeline stage to query
the collection.
To run this query in MongoDB Compass:
Click the Aggregations tab.
Click Select..., then configure each of the following pipeline stages by selecting the stage from the dropdown and adding the query for that stage. Click Add Stage to add additional stages.
Pipeline StageQuery$search
{ "index": "iterate-cursor-tutorial", "text": { "query": "Summer", "path": "title" } } $project
{ "id": 0, "title": 1 } At the top right corner, click Export.
Select JSON for the Export File Type.
Click Export....
Open the JSON file to view all the documents in the results:
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 }]