Základní problém je, že „hash“ v Perlu je ve výchozím nastavení řazen podle „klíče“. Abyste získali „pořadí vložení“, musíte použít Tie::IxHash
takto:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Když to potom použijete ve svém dotazu MongoDB, klíče jsou uvažovány v pořadí, v jakém jste je vložili, nikoli v jejich lexikálním pořadí.
Stejně to tak mělo být, protože klíče jsou v lexikálním pořadí, ale navrhuji, že jste udělali něco špatně a stejně musíte znát pořadí vložení.
Jiným důvodem je, že „in_stock“ neexistuje nebo není skutečným názvem cesty k poli. Úplnou cestu k poli musíte zadat pomocí "dot notation" jinak je cesta neplatná.