如何使用perl脚本显示与mongodb相关的所有数据库

时间:2016-06-23 13:54:59

标签: mongodb perl

有人可以帮我用Perl脚本显示所有MongoDB数据库吗?

我连接到MongoDB后我就被卡住了。

我的代码如下:

select keyspace_name, writetime(durable_writes) from system_schema.keyspaces

但我收到错误:

use MongoDB; 
use MongoDB::OID;
use Data::Dumper; 

use strict;
use warnings;

use lib '.';
use Exporter qw(import);

our @EXPORT_OK = qw(teller);

my $client = MongoDB::MongoClient->new(
    host => 'localhost',
    port => 27020
);
my $db_list = listDatabases();

foreach my $n ( $#db_list ) {
    say $db_list[$n];
}

1 个答案:

答案 0 :(得分:2)

这两行有很多错误。

my $db_list = listDatabases();
foreach my $n ($#db_list) { say $db_list[$n]; }

您的错误是由具有相同名称的数组和标量变量之间的混淆引起的。

my $db_list声明一个标量变量。但是$#db_list引用了一个名为@db_list的数组。你可能意味着$#{$db_List}。但即便如此,foreach my $n ($#{$db_list})在包含单个项目的列表中进行迭代也无法做到。我想你可能想要:

foreach my $n (0 .. $#{$db_list})

由于我不知道你的listDatabases()子程序是如何工作的,所以这里涉及一些猜测。你表现得像是返回一个数组引用,但它可能返回一个数组,代码应该是:

# Note: array, not scalar
my @db_list = listDatabases();
foreach my $n (0 .. $#db_list) { say $db_list[$n]; }

在不了解listDatabases()的情况下,我们无法确定这一点。

我注意到MongoDB::MongoClient有一个名为database_names()的方法。你可以这样使用:

my @db_list = $client->database_names;
foreach my $n (0 .. $#db_list) { say $db_list[$n]; }