如何使用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)排序数组。我做错了什么?
答案 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"指定字段的完整路径,否则路径无效。