Det grundlæggende problem her er, at en "hash" i Perl er sorteret efter "nøgle" som standard. For at få "indsættelsesrækkefølgen" skal du bruge Tie::IxHash
som følger:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Når du så bruger dette i din MongoDB-forespørgsel, betragtes nøglerne i den rækkefølge, du indsatte dem, i stedet for deres leksikale rækkefølge.
Det burde i hvert fald have været ordnet på den måde, da tasterne er i leksikalsk rækkefølge, men jeg foreslår, at du har gjort noget forkert, og at du alligevel skal være opmærksom på indsættelsesrækkefølgen.
Den ellers årsag er, at "in_stock" ikke eksisterer, eller ikke er det sande stinavn til feltet. Du skal angive den fulde sti til feltet med "dot notation" ellers er stien ugyldig.