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

Mongo kompleks sortering?

OPDATERING: Dette svar ser ud til at være forældet; det ser ud til, at brugerdefineret sortering kan opnås mere eller mindre ved at bruge $project funktion af aggregeringspipelinen til at transformere inputdokumenterne før sortering. Se også @Aris svar.

Det tror jeg ikke er muligt direkte; sorteringsdokumentationen nævner bestemt ikke nogen måde at give en brugerdefineret sammenligningsfunktion på.

Du har det nok bedst med at udføre sorteringen i klienten, men hvis du virkelig er fast besluttet på at gøre det på serveren, kan du muligvis bruge db.eval() at arrangere at køre sorteringen på serveren (hvis din klient understøtter det).

Sortering på serversiden:

db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

Versus den tilsvarende sortering på klientsiden:

db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

Bemærk, at det også er muligt at sortere via en aggregeringspipeline og efter $orderby operator (dvs. ud over .sort() ) men ingen af ​​disse måder giver dig mulighed for at give en brugerdefineret sorteringsfunktion.



  1. Range Querying i Redis - Spring Data Redis

  2. Mongodb:Forespørg et json-objekt indlejret i et array

  3. FieldPath-feltnavne må ikke indeholde '.' i $gruppe

  4. Redis benchmarking for hget- og hset-kommandoer