$in returns a boolean indicating whether a specified value is in an array.
$in has the following operator expression syntax:
{ $in: [ <expression>, <array expression> ] }
If you loop, there is some amount of setup and teardown for each query creating and exhausting cursors which would create overhead.
If you are not performing this on a local machine it also creates TCP/IP overhead for every request. Locally you could use domain sockets.
There is an index on "_id" generated by default and assembling a group of documents to return in a batch request should be extremely fast so there is no need to break this up into smaller queries.