Det grundläggande problemet här är att en "hash" i Perl sorteras efter "nyckel" som standard. För att få "insättningsordningen" måste du använda Tie::IxHash
enligt följande:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
När du sedan använder detta i din MongoDB-fråga, betraktas nycklarna i den ordning du infogade dem, snarare än deras lexciala ordning.
Det borde ha ordnats på det sättet i alla fall eftersom nycklarna är i lexikal ordning, men jag föreslår att du gjorde något fel och att du ändå måste vara medveten om insättningsordningen.
Orsaken annars är att "in_stock" inte existerar, eller inte är det sanna sökvägsnamnet till fältet. Du måste ange hela sökvägen till fältet med "dot notation" annars är sökvägen ogiltig.