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