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?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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.