尝试使用MongoDB'时出错;Perl中的游标排序

尝试使用MongoDB'时出错;Perl中的游标排序,mongodb,perl,Mongodb,Perl,描述了获得光标后如何对结果进行排序 但是,当我尝试使用自己的实现进行编译时: #!/asp_share/linopt/perl-5.8.8/bin/perl use CGI; use Fcntl; use MongoDB; use JSON; use Text::CSV; use strict; use warnings; my $q = new CGI; my $dbhost = $q->param('dbhost') || 'sb2mdb01'; print $q->head

描述了获得光标后如何对结果进行排序

但是,当我尝试使用自己的实现进行编译时:

#!/asp_share/linopt/perl-5.8.8/bin/perl

use CGI;
use Fcntl;
use MongoDB;
use JSON;
use Text::CSV;
use strict;
use warnings;

my $q = new CGI;
my $dbhost = $q->param('dbhost') || 'sb2mdb01';
print $q->header('application/json');

# Connect to db and retrieve stats for given db
my $client = MongoDB::Connection->new("host" => $dbhost);
my $tracking_db = $client->get_database("db_size_tracking");
my $db_name = "st_" . ($q->param('db') || "db_size_tracking" );
my $collection = $tracking_db->get_collection($db_name);
my $every = $q->param('every') || 1;  # sample per $every line
my $date = $q->param('date') || `date +%Y%m%d`; # date to start from
chomp($date);
my $year = substr($date,0,4);
my $month = "".substr($date,4,2);
my $day = "".substr($date,6,2);
my $cursor = $collection->find({recorded_at => {'$gte' => DateTime->new( year => $year, month => $month, day => $day)}});
$cursor->sort([recorded_at => 1]);
# Generate and return JSON
my @sizeTimes;
my $count = 0;
while (my $doc = $cursor->next) {
    next if ($count++ % $every != 0);
    my $recorded_at = $doc->{'recorded_at'}->iso8601;
    my $datasize = $doc->{'datasize'};
    my %row;
    $row{'recorded_at'} = $recorded_at;
    $row{'datasize'} = $datasize;
    push @sizeTimes, \%row;
}

print encode_json {sizeTimes => \@sizeTimes};
我明白了

not a hash reference at /linopt/perl-5.8.8/lib/site_perl/5.8.8/i686-linux/MongoDB/Cursor.pm line 182
        MongoDB::Cursor::sort('MongoDB::Cursor=HASH(0x8e87160)', 'ARRAY(0x8e86614)')
我对perl相当陌生,所以我不确定如何解释这个错误消息,非常感谢您的帮助

返回的文件的格式如下

{recorded_at: recorded_at, datasize: datasize}
Perl:v5.8.8 MongoDB:3.0.7

$cursor->sort({recorded_at => 1});
也可用于按排序


该文档是针对较新的MongoDB perl驱动程序的,我敢打赌如果您也在查找它,您一定会被卡住。

@СССц27我不确定还需要添加哪些其他信息,perl/Mongodb的版本?如何显示您希望在结果中返回的文档以及其他代码行,包括集合选择和
->find()
。您是否也阅读了关于要使用的其他有效结构的文档,并尝试了它们?如果是这样,那么也显示出来。@NeilLunn更新了整个脚本。.find确实有效,但我稍后将使用GoogleAPI绘制这些数据,并希望在查询时对其进行排序。请记住,如果它比v1.0版本旧,那么您链接到的当前文档将不会有帮助。