2012-03-05 5 views
1

Я написал сценарий для вставки элементов в mongodbВставить в MongoDB с Perl

#!/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

Ну, не меняйте рабочий код на нерабочий код. Почему вы хотите сделать строку '$ a'? – cjm

ответ

5

insert method on MongoDB::Collection ожидает хэш-реф:

insert ($object, $options?)

Inserts the given $object into the database and returns it's id value. $object can be a hash reference, a reference to an array with an even number of elements, or a Tie::IxHash .

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

+0

спасибо. 'Tie :: IxHash' действительно решает это. – conandor

Смежные вопросы