1

我使用 perl 脚本作为客户端来查询 mongoDB 数据库。我的代码如下:

my $some_users = $users->find({"name" => "Joe"});
 while (my $doc = $all_users->next) {
        print $doc->{'name'}."\n";
    }

cpan 教程 说:

find returns a MongoDB::Cursor, which can be iterated over. It lazily loads results from the database.

是的,经过我的仔细观察,我发现调用 find() 的时间很短,而如果 find() 函数返回的数据很多,MongoDB::Cursor 的迭代将需要很长时间。所以,我变得很困惑,延迟加载是什么意思?延迟加载意味着“什么都不做”?延迟加载意味着作弊?

4

1 回答 1

1

延迟加载意味着返回一个迭代器而不是整个数据。

所以在你的循环中:

这不会在 $some_users 中返回和存储完整数据,只是对与查询匹配的数据的引用/迭代器。

    my $some_users = $users->find({"name" => "Joe"});

现在您可以使用迭代器迭代该数据,记录由 Perl Mongodb 驱动程序在循环中获取,它可能会一个接一个地获取它们,或者预取一批比如 1000 条记录,然后在 1000 条之后重新获取,这取决于驱动程序实现。

     while (my $doc = $all_users->next) {
            print $doc->{'name'}."\n";
        }
于 2013-10-08T13:33:33.787 回答