如果我的收藏有10条记录。
my $records = $collection->find;
while (my $record = $records->next){
do something;
}
mongodb服务器有十次往返吗? 如果是这样,有没有办法将其限制为一次往返?
感谢。
答案 0 :(得分:2)
不,我绝对相信在上面的代码中只有一次往返服务器。例如,在c#
中,当您开始迭代时,相同的代码将仅加载一次所有数据。
while (my $record = $records->next){
^^^
here on first iteration driver load all 10 records
在我看来逻辑上只有一个请求服务器。
shell find()方法返回一个 那么我们可以使用的游标对象 迭代以检索特定文档 从结果
答案 1 :(得分:2)
这是一个查询,就像查询RDBMS一样。
根据文件:
my $cursor = $collection->find({ i => { '$gt' => 42 } });
执行给定的$ query并返回带结果
的MongoDB :: Cursor my $cursor = $collection->query({ }, { limit => 10, skip => 10 });
有效的查询属性是:
答案 2 :(得分:2)
答案是,默认情况下,每批记录/文档只返回100个一组中的一个查询。
如果您的结果集是250个文档,则第一次访问光标以获取文档1将在内存中加载文档1-100,当访问doc 101时,这将导致从服务器加载另外100个文档,最后一个更多查询最近50个文档。
请参阅有关游标和“getmore”命令的mongodb文档。
答案 3 :(得分:1)
您可以使用“mongosniff”工具来确定线路上的操作。除此之外:你基本上没有其他选择,然后迭代光标....所以你为什么关心?