Das grundlegende Problem dabei ist, dass ein „Hash“ in Perl standardmäßig nach „Schlüssel“ geordnet ist. Um die "Einfügungsreihenfolge" zu erhalten, müssen Sie Tie::IxHash
wie folgt:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Wenn Sie dies dann in Ihrer MongoDB-Abfrage verwenden, werden die Schlüssel in der Reihenfolge berücksichtigt, in der Sie sie eingefügt haben, und nicht in ihrer lexikalischen Reihenfolge.
Es hätte sowieso so geordnet werden sollen, da die Schlüssel in lexikalischer Reihenfolge sind, aber ich schlage vor, dass Sie etwas falsch gemacht haben und sich der Einfügereihenfolge sowieso bewusst sein müssen.
Der andere Grund ist, dass "in_stock" nicht existiert oder nicht der wahre Pfadname zu dem Feld ist. Sie müssen den vollständigen Pfad zum Feld mit "dot notation"