MongoDB和Perl:维护插入顺序

时间:2012-05-30 14:40:18

标签: perl mongodb

我一直在愚弄Perl MongoDB库,并且很难搞清楚如何做一些非常简单的事情。

如何在插入时维护数据字段的顺序?我的代码如下:

use MongoDB;
use MongoDB::Database;
use MongoDB::OID;


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


$users->insert
(
   {
     "product" => "WooHoo",
     "errcode" => "WM2001_89873",
     "solution1" => "Hit the computer.",
     "line_text" => "Inserted in Perl too"
   }
);

当我回过头来查看我的MongoDB中如何插入记录时,它看起来像这样:

db.testlogwiki.find([找到它的条件])。pretty();

"_id" : ObjectId("4fc62c2900ece6040c000000"),
"solution1" : "Hit the computer.",
"product" : "WooHoo",
"errcode" : "WM2001_89873",
"line_text" : "Inserted in Perl too"

那不是我想要的订单......我怎么做到我想要的订单?

2 个答案:

答案 0 :(得分:5)

根据定义,Perl和Mongo的BSON哈希值都是无序的。如果您需要以某种方式订购物业,您必须自己跟踪它。

答案 1 :(得分:1)

MongoDB不一定与此有任何关系 - Perl哈希首先不保留顺序:

$ perl -MData::Dumper -E 'my $foo = { one => 1, two => 2, three => 3 }; print Dumper($foo);'
$VAR1 = {
          'three' => 3,
          'one' => 1,
          'two' => 2
        };

你可以使用Tie::IxHash来创建哈希值,这些哈希值会在内存中保留它们的顺序,但我不能说它是否会在插入MongoDB并从MongoDB中检索时保留它们的顺序。