Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongodb : $in operator vs lot of single queries

I know MongoDB is able to handle a lot of requests/sec, but let's say I have to query a lot of documents of a collection given their _id; what sounds better: making a $in on the _id attribute with all the ids I want to get, or loop over findOne queries?

like image 896
spacenick Avatar asked Nov 21 '11 22:11

spacenick


People also ask

How does the $in operator work MongoDB?

For comparison of different BSON type values, see the specified BSON comparison order. If the field holds an array, then the $in operator selects the documents whose field holds an array that contains at least one element that matches a value in the specified array (for example, <value1> , <value2> , and so on).

How many operations per second can MongoDB handle?

MongoDB's latency increases together with the workload, up to the maximum throughput of roughly 1,000 operations per second.

How do I query multiple values in MongoDB?

MongoDB provides the find() that is used to find multiple values or documents from the collection. The find() method returns a cursor of the result set and prints all the documents. To find the multiple values, we can use the aggregation operations that are provided by MongoDB itself.


1 Answers

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.

like image 63
Tyler Brock Avatar answered Sep 20 '22 07:09

Tyler Brock