1

次のBSON構造をperlを使用してMongoDBに挿入したいと思います。

{"name" : "BOB", "stuff" : [{"area1": [1,2,3,4,5]}, {"area2": [5,6,7,8,9]}]}

しかし、これの良い例を見つけるのに苦労しました。私は次のことを試しました:

#!/usr/bin/perl
use MongoDB;
use MongoDB::Database;
use MongoDB::OID;

my $conn = MongoDB::Connection->new;
my $db = $conn->test;
my $users = $db->real_time10;


$users->insert
({
    "name" => "BOB",
    "stuff" => 
              "area1" => [1,2,3,4,5],
              "area2" => [5,6,7,8,9]
});

これは、mongoシェルでのクエリ時に大まかに出力されます。

db.real_time10.find()

{ "_id" : ObjectId("4fc912fa000207ec08000000"), "ARRAY(0xa5bdd4)" : "area2", "A
RAY(0x2f2e844)" : null, "name" : "BOB", "stuff" : "area1" }

何が起こっている?これを行う簡単な方法はありますか?

私の夢/望ましい出力は次のようになります:

> db.real_time10.find()

{ "_id" : ObjectId("4fc912fa000207ec08000000"), "stuff" : {"area1" : [1,2,3,4,5],   
"area2": [5,6,7,8,9]}, "name" : "BOB" }
4

2 に答える 2

3

サンプルコードにanonymous-array-constructor(角かっこ)がありませんが、BSONの例にはそれらが含まれています。目的の出力を取得するには、次のことを試してください。

$users->insert({
    "name" => "BOB",
    "stuff" => {
        "area1" => [1,2,3,4,5],
        "area2" => [5,6,7,8,9]
    }
});

配列コンストラクターを除外することにより、提供された配列キーと値のペアを使用してハッシュを構築し、次のように解析されます(データダンプと一致します)。

{
    "name" => "BOB",
    "stuff" => "area1",
    [1,2,3,4,5] => "area2",
    [5,6,7,8,9] => undef
}

注:スカラーコンテキストのarray-refは、「ARRAY(0x6052b8)」のような文字列として表示されます。

于 2012-06-01T19:42:28.183 に答える
1

ああ、それはこれです:

#!/usr/bin/perl
use MongoDB;
use MongoDB::Database;
use MongoDB::OID;

my $conn = MongoDB::Connection->new;
my $db = $conn->test;
my $users = $db->real_time10;


$users->insert({
    "name" => "BOB",
    "stuff" => 
          {"area1" => [1,2,3,4,5],
          "area2" => [5,6,7,8,9]}

});

これは以下を出力します:

{ "_id" : ObjectId("4fc91f110064e9d40b000000"), "name" : "BOB", "stuff" : { "are
a2" : [ 5, 6, 7, 8, 9 ], "area1" : [ 1, 2, 3, 4, 5 ] } }
于 2012-06-01T20:00:52.637 に答える