Vấn đề cơ bản ở đây là một "băm" trong Perl được sắp xếp theo "khóa" theo mặc định. Để có được "thứ tự chèn", bạn cần sử dụng Tie::IxHash
như sau:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Sau đó, khi bạn sử dụng điều này trong truy vấn MongoDB của mình, các khóa được xem xét theo thứ tự bạn đã chèn chúng, thay vì thứ tự từ vựng của chúng.
Dù sao thì lẽ ra nó phải được sắp xếp theo cách đó vì các phím có thứ tự từ vựng, nhưng tôi khuyên bạn đã làm sai điều gì đó và dù sao thì bạn cũng cần phải lưu ý về thứ tự chèn.
Lý do khác là "in_stock" không tồn tại hoặc không phải là tên đường dẫn thực sự đến trường. Bạn cần xác định đường dẫn đầy đủ đến trường bằng "ký hiệu dấu chấm" nếu không thì đường dẫn không hợp lệ.