Podstawowym problemem jest to, że "hasz" w Perlu jest domyślnie porządkowany według "klucza". Aby uzyskać „kolejność wstawiania”, musisz użyć Tie::IxHash
w następujący sposób:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Następnie, gdy użyjesz tego w zapytaniu MongoDB, klucze są uwzględniane w kolejności, w jakiej zostały wstawione, a nie w kolejności leksykalnej.
Powinno to być uporządkowane w ten sposób, ponieważ klucze są w porządku leksykalnym, ale sugeruję, że zrobiłeś coś złego i i tak musisz zdawać sobie sprawę z kolejności wstawiania.
Innym powodem jest to, że „in_stock” nie istnieje lub nie jest prawdziwą nazwą ścieżki do pola. Musisz określić pełną ścieżkę do pola za pomocą "notacji kropkowej" w przeciwnym razie ścieżka jest nieprawidłowa.