Iterate a Cursor in the mongo Shell
db.collection.find() method returns a cursor. To access the documents, you need to iterate the cursor. However, in the
mongo shell, if the returned cursor is not assigned to a variable using the
var keyword, then the cursor is automatically iterated up to 20 times  to print up to the first 20 documents in the results.
The following examples describe ways to manually iterate the cursor to access the documents or to use the iterator index.
You can call the cursor variable in the shell to iterate up to 20 times  and print the matching documents, as in the following example:
You can also use the cursor method
next() to access the documents, as in the following example:
As an alternative print operation, consider the
printjson() helper method to replace
You can use the cursor method
forEach() to iterate the cursor and access the documents, as in the following example:
|||(1, 2) You can use the
Additionally, some drivers provide access to the documents by using an index on the cursor (i.e.
cursor[index]). This is a shortcut for first calling the
toArray() method and then using an index on the resulting array.
Consider the following example:
myCursor is equivalent to the following example:
By default, the server will automatically close the cursor after 10 minutes of inactivity, or if client has exhausted the cursor. To override this behavior in the
mongo shell, you can use the
After setting the
noCursorTimeout option, you must either close the cursor manually with
cursor.close() or by exhausting the cursor’s results.
See your driver documentation for information on setting the
As a cursor returns documents, other operations may interleave with the query. For the MMAPv1 storage engine, intervening write operations on a document may result in a cursor that returns a document more than once if that document has changed. To handle this situation, see the information on Cursor Snapshot.
The MongoDB server returns the query results in batches. The amount of data in the batch will not exceed the maximum BSON document size. To override the default size of the batch, see
aggregate() operations have an initial batch size of 101 documents by default. Subsequent
getMore operations issued against the resulting cursor have no default batch size, so they are limited only by the 16 megabyte message size.
For queries that include a sort operation without an index, the server must load all the documents in memory to perform the sort before returning any results.
As you iterate through the cursor and reach the end of the returned batch, if there are more results,
cursor.next() will perform a
getMore operation to retrieve the next batch. To see how many documents remain in the batch as you iterate the cursor, you can use the
objsLeftInBatch() method, as in the following example:
- number of timed out cursors since the last server restart
- number of open cursors with the option
DBQuery.Option.noTimeoutset to prevent timeout after a period of inactivity
- number of “pinned” open cursors
- total number of open cursors
Consider the following example which calls the
db.serverStatus() method and accesses the
metrics field from the results and then the
cursor field from the
The result is the following document: