MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo komplexe Sortierung?

AKTUALISIERUNG: Diese Antwort scheint veraltet zu sein; Es scheint, dass eine benutzerdefinierte Sortierung mehr oder weniger durch die Verwendung von $project erreicht werden kann Funktion der Aggregationspipeline, um die Eingabedokumente vor dem Sortieren umzuwandeln. Siehe auch die Antwort von @Ari.

Ich glaube nicht, dass dies direkt möglich ist; Die Sort-Dokumentation erwähnt sicherlich keine Möglichkeit, eine benutzerdefinierte Vergleichsfunktion bereitzustellen.

Wahrscheinlich ist es am besten, die Sortierung im Client durchzuführen, aber wenn Sie wirklich entschlossen sind, dies auf dem Server zu tun, können Sie vielleicht db.eval() verwenden zu veranlassen, dass die Sortierung auf dem Server ausgeführt wird (falls Ihr Client dies unterstützt).

Serverseitige Sortierung:

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

Verglichen mit der entsprechenden clientseitigen Sortierung:

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

Beachten Sie, dass es auch möglich ist, über eine Aggregationspipeline und nach $orderby zu sortieren Operator (also zusätzlich zu .sort() ), aber mit keiner dieser Möglichkeiten können Sie eine benutzerdefinierte Sortierfunktion bereitstellen.