sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan kan jeg sortere efter flere felter i mongodb med Perl?

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.




  1. Importerer mongo-samling til eksisterende samling uden at tilsidesætte den

  2. Norm.MongoException:Forbindelsestimeout forsøger at få forbindelse fra forbindelsespuljen

  3. Brug javascript-variabel som en værdi af $regex i MongoDB-forespørgsel

  4. Sådan fjerner du Redis på 'besked'-lyttere