$result = $collection->find('some constraints')->limit(10);
现在假设满足“某些约束”的文档是 10000。
那么,这个查询是首先在内存中获取 10000 个文档并返回 10 个给我,还是只加载 limit
指定的 10 个文档?
最佳答案
我最近写了一篇 article对这个。简而言之,当您使用 limit 时,驱动程序只会从服务器请求 10 个项目,因此在客户端,内存中的文档不会超过 10 个。 “limit”严格来说是一个客户端的东西,并且只在获取文档时使用。查询仍将完整运行。
在服务器端,将读取所有与您的 find() 约束相匹配的文档,这意味着如果它们尚未在内存中,操作系统会将它们从磁盘放入内存中。但话又说回来,从 MongoDB 服务器进程来看,所有文档无论如何都始终在内存中;由操作系统来对此进行缓存,并在磁盘之间进行分页。在 their docs 阅读更多关于 MongoDB 如何管理内存的信息.
关于php - MongoDB Limit() 是否加载内存中的所有文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862109/