MongoDB : Why should we close the cursor after it is used? MongoDB : Why should we close the cursor after it is used? database database

MongoDB : Why should we close the cursor after it is used?


Closing the cursor is only really required when you do not "exhaust" the results. Or in other terms, iterate over all the possible results returned by the cursor.

Leaving a "cursor" open is like leaving an open connection that never gets re-used. These things are not free. In fact the standard connection cost is 1MB (approx). So if you are leaving a lot of "partially iterated" cursors hanging around there is a general overhead in terms of an active connection and it's memory usage.

If in fact you actually always iterate "all" of the results (and that includes a "limit" which is a "cursor modifier") then the cursor will close and all is okay.

General usage will be that you actually exhaust/deplete the cursor by going through all of the results. Therefore there is no explicit need to destroy.


It depends on your usage, but at least in my web application - the client handles the closing.Why? because my web application follows the pattern of short & stateless request handling (you get a request from the browser, build an HTTP response quickly - less than a second - and this response relies on mongo data). So my client only needs the connection for 1 second.

Now, consider what if I have (say) 50 requests per minute... my server handles them comfortably. But it would have crashed if each request were to hold on to resources for 10 minutes... E.g. after 9 minutes I would have 450 unnecessary open resources...