Perl mongodb $ collecton-> find ::获取mongodb的往返次数是多少?

时间:2011-03-26 10:26:11

标签: perl mongodb

如果我的收藏有10条记录。

my $records = $collection->find;
while (my $record = $records->next){
   do something;
}

mongodb服务器有十次往返吗? 如果是这样,有没有办法将其限制为一次往返?

感谢。

4 个答案:

答案 0 :(得分:2)

不,我绝对相信在上面的代码中只有一次往返服务器。例如,在c#中,当您开始迭代时,相同的代码将仅加载一次所有数据。

while (my $record = $records->next){
                               ^^^
                         here on first iteration driver load all 10 records      

在我看来逻辑上只有一个请求服务器。

来自documentation

  

shell find()方法返回一个   那么我们可以使用的游标对象   迭代以检索特定文档   从结果

答案 1 :(得分:2)

这是一个查询,就像查询RDBMS一样。

根据文件:

  my $cursor = $collection->find({ i => { '$gt' => 42 } });

执行给定的$ query并返回带结果

的MongoDB :: Cursor
  my $cursor = $collection->query({ }, { limit => 10, skip => 10 });

有效的查询属性是:

  • limit - 限制结果数量。
  • 跳过 - 抓住一些结果。
  • sort_by - 订购结果。

答案 2 :(得分:2)

答案是,默认情况下,每批记录/文档只返回100个一组中的一个查询。

如果您的结果集是250个文档,则第一次访问光标以获取文档1将在内存中加载文档1-100,当访问doc 101时,这将导致从服务器加载另外100个文档,最后一个更多查询最近50个文档。

请参阅有关游标和“getmore”命令的mongodb文档。

答案 3 :(得分:1)

您可以使用“mongosniff”工具来确定线路上的操作。除此之外:你基本上没有其他选择,然后迭代光标....所以你为什么关心?