$result = $collection->find('some constraints')->limit(10);
Run Code Online (Sandbox Code Playgroud)
现在假设满足"一些约束"的文件是10000.
那么,这个查询是否首先在内存中获取10000个文档并向我返回10或者它只加载10个指定的文档limit?
我最近写了一篇关于此的文章.简而言之,当您使用限制时,驱动程序将仅从服务器请求10个项目,因此在客户端,内存中将不超过10个文档."limit"严格来说是客户端事物,仅在获取文档时使用.查询仍将完整运行.
在服务器端,将读取与find()约束匹配的所有文档,这意味着操作系统会将这些文件从磁盘放入内存,如果它们尚未在内存中.但话说回来,从MongoDB服务器进程来看,所有文档总是在内存中; 它是操作系统进行缓存,以及从磁盘进行分页.阅读更多有关MongoDB如何在其文档中管理内存的信息.