有人可以帮我用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];
}
答案 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]; }