Вставьте в Mongodb с Perl

Я написал скрипт для вставки элементов в mongodb

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

my $hostname = "localhost";
my $port = 27017;

my $conn = MongoDB::Connection->new( "host" => "$hostname", 
                                     "port" => $port );
my $db = $conn->test;
my $user_stats = $db->test_stats;

# Insert line
$user_stats->insert({'user_id' => 123, 
                     'pointA'=> 12, 
                     'pointB' => 13, 
                     'total' => 25, } );

my $myStr = $user_stats->find_one();
print Dumper($myStr);

Код работает хорошо. Однако, когда я перехожу на insert line в

my $a = "{'user_id' => 123, 
          'pointA' => 12,
          'pointB' => 13,
          'total' => 25}";

$user_stats->insert($a);

Это не работает, учитывая обратную ошибку:not a reference at /usr/local/lib/perl5/site_perl/5.12.3/sun4-solaris/MongoDB/Collection.pm line 296.

1 ответ

Решение

insert метод на MongoDB::Collection ожидает hash-ref:

вставить ($ объект, $ параметры?)

Вставляет данный $object в базу данных и возвращает его значение идентификатора. $object может быть ссылкой на хеш, ссылкой на массив с четным числом элементов или Tie::IxHash,

Таким образом, обычный подход заключается в использовании хэш-ссылки и ваш $a это строка, а не хэш-ссылка. Другие параметры - это ссылка на массив, которую можно легко "привести" к ссылке на хэш (т.е. она имеет вид [key, value, key, value, ...]) или Tie::IxHash (это хеш, который поддерживает порядок); ваш $a Строка тоже не из тех.

Другие вопросы по тегам