Masalah dasar di sini adalah bahwa "hash" di Perl diurutkan oleh "kunci" secara default. Untuk mendapatkan "urutan penyisipan", Anda perlu menggunakan Tie::IxHash
sebagai berikut:
use Tie::IxHash;
my %sort;
tie ( %sort, 'Tie::IxHash' );
my $sort = \%sort;
$sort = { "is_instock" => -1, "ua" => 1 };
Kemudian ketika Anda menggunakan ini dalam kueri MongoDB Anda, kunci-kunci tersebut dipertimbangkan dalam urutan Anda memasukkannya, bukan urutan leksikalnya.
Seharusnya sudah diurutkan seperti itu karena kuncinya dalam urutan leksikal, tapi saya sarankan Anda melakukan sesuatu yang salah dan Anda tetap harus mengetahui urutan penyisipannya.
Alasan sebaliknya adalah bahwa "in_stock" tidak ada, atau bukan nama jalur yang benar ke bidang tersebut. Anda perlu menentukan jalur lengkap ke bidang dengan "notasi titik" jika tidak, jalurnya tidak valid.