如何使用Perl对mongodb中的多个字段进行排序?

时间:2015-10-06 09:57:43

标签: mongodb perl sorting mongodb-query

如何使用Perl在MongoDB中进行多重排序?

我目前的方法看起来像这样:

my $sort = {"is_instock" => -1, "ua" => 1};
my $resultSet = $collection
   ->find({moderated => 1, markers => {'$all'=>$obj->{markers}}})
   ->sort($sort)
   ->limit(25);
@{$result} = $resultSet->all;

但是,我按一个字段(ua)排序数组。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这里的基本问题是"哈希"在Perl中按" key"默认情况下。为了获得插入顺序"您需要使用Tie::IxHash,如下所示:

use Tie::IxHash;

my %sort;
tie ( %sort, 'Tie::IxHash' );

my $sort = \%sort;
$sort  =  { "is_instock" => -1, "ua" => 1 };

然后,当您在MongoDB查询中使用它时,按照您插入的顺序考虑键,而不是它们的词序。

无论如何应该按顺序排序,因为键是按词法顺序排列的,但我建议你做错了,无论如何你需要知道插入顺序。

另一个原因是" in_stock"不存在,或者不是该字段的真实路径名。您需要使用"dot notation"指定字段的完整路径,否则路径无效。