3
$result = $collection->find('some constraints')->limit(10);

Now suppose the documents satisfying "some constraints" are 10000.

So, does this query first fetch 10000 documents in memory and returns 10 to me or does it load only 10 documents specified by limit?

4

1 回答 1

8

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

在服务器端,所有符合 find() 约束的文档都将被读取,这意味着操作系统会将它们从磁盘放入内存中,如果它们还没有在内存中的话。但话又说回来,从 MongoDB 服务器进程来看,所有文档总是在内存中;由操作系统来进行缓存,并在磁盘之间进行分页。在他们的文档中阅读更多关于 MongoDB 如何管理内存的信息。

于 2012-06-02T16:26:20.040 回答