I would definitely go with using the $in query and providing a array of _ids.
Example:
db.collection.find({
"key": {
"$in": [
ObjectId("xxx"),
ObjectId("yyy"),
ObjectId("zzz")
]
}
})
Why?
- If you loop, there is a certain amount of setup and teardown for each query creating and exhausting cursors which would create overhead.
- If you are not doing this on a local machine it also creates tcp/ip overhead for every request. Locally you could use domain sockets.
- There is a index on “_id” created by default and collecting 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.
There’s some additional documentation here if you want to check it out.