如何使用Perl在mongodb中按多个字段排序?

阿尔特姆·巴尔达霍夫(Artem Bardachov)

如何使用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)排序的数组。我做错了什么?

布雷克七世

这里的基本问题是,默认情况下,Perl中的“哈希”按“键”排序。为了获得“插入顺序”,您需要使用Tie::IxHash以下方法:

use Tie::IxHash;

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

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

然后,当您在MongoDB查询中使用此键时,将按插入键的顺序而不是按词法顺序来考虑键。

由于键是按词法顺序排列的,因此应该以这种方式进行排序,但是我建议您做错了事,无论如何您都需要注意插入顺序。

否则,原因是“ in_stock”不存在,或者不是该字段的真实路径名。您需要使用“点符号”指定字段的完整路径,否则该路径无效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章