MongoDB :: NetworkTimeout:等待套接字准备好读取时超时

时间:2017-08-23 11:20:13

标签: mongodb perl

我有perl脚本来运行mongo查询。

    #!/usr/bin/perl 
        use strict;
        use warnings;
        use MongoDB;
        use Data::Printer;
        use MongoDB::QueryResult;

        my $mc   = MongoDB->connect('mongodb://user:pass@localhost:27012/test_db');
        my $coll = $mc->ns("test_db.collection1");

        my @permissibleCars =
         ("ABC","DEF","XYZ","MNO","PQR"); 
        my @pipeline = (
            {
                '$match' => {
                    "Contract"        => { '$in' => \@permissibleCars },
                    "Class" => "Right"
                    }
            },
            { '$group' => { _id => '$Contract', count => { '$sum' => 9 } } }
        );

        my $res = $coll->aggregate( \@pipeline, { allowDiskUse => 1 } );

        # query & iterate
            while (my $row = $res->next) {
            # it is 'p', from Data::Printer!
            p $row;
        } 

随机失败并出现以下错误: -

MongoDB::NetworkTimeout: Timed out while waiting for socket to become ready for reading

现在,根据我的阅读,我们需要将socketTimeoutMS值更改为更大的值。但我不知道我在哪里设置它?

此外,maxTimeMS或maxPoolSize在这种情况下会有所帮助吗? @permissibleCars字段可能有大约10K记录。

问候。

1 个答案:

答案 0 :(得分:0)

您可以通过连接字符串设置连接和套接字超时,如下所示:

MongoDB->connect('mongodb://user:pass@localhost:27012/test_db?connectTimeoutMS=...;socketTimeoutMS=...')

MongoDB Perl驱动程序还允许您通过connect方法设置超时(更多详情here)。