MongoDB Limit()是否加载内存中的所有文档?

Ash*_*sh 3 php mongodb

$result = $collection->find('some constraints')->limit(10);
Run Code Online (Sandbox Code Playgroud)

现在假设满足"一些约束"的文件是10000.

那么,这个查询是否首先在内存中获取10000个文档并向我返回10或者它只加载10个指定的文档limit

Der*_*ick 5

我最近写了一篇关于此的文章.简而言之,当您使用限制时,驱动程序将仅从服务器请求10个项目,因此在客户端,内存中将不超过10个文档."limit"严格来说是客户端事物,仅在获取文档时使用.查询仍将完整运行.

在服务器端,将读取与find()约束匹配的所有文档,这意味着操作系统会将这些文件从磁盘放入内存,如果它们尚未在内存中.但话说回来,从MongoDB服务器进程来看,所有文档总是在内存中; 它是操作系统进行缓存,以及从磁盘进行分页.阅读更多有关MongoDB如何在其文档中管理内存的信息.

  • 根据您的查询,MongoDB可能不会查找与您的查询匹配的所有文档,但应在找到给定数字后立即停止.至少我期望这种行为,因为它表现得非常不同.但是只要你在查询中进行某种排序,MongoDB就必须查找所有条目,因为它不能在不知道所有文档的情况下进行排序.实际上,只要数据集小于内存,MongoDB就会将所有内容保存在内存中,这并没有多大区别. (2认同)