MongoDB bietet einige Möglichkeiten, Dokumente in einer bestimmten Reihenfolge zu sortieren. Jeder von ihnen ermöglicht es uns, die Dokumente in aufsteigender oder absteigender Reihenfolge zu ordnen.
Es besteht auch die Möglichkeit, die Ergebnisse eines $text
zu ordnen Suche – Sortierung nach dem berechneten textScore
Metadaten in absteigender Reihenfolge.
Hier sind 3 Möglichkeiten, Dokumente in MongoDB zu sortieren.
Der cursor.sort()
Methode
Der cursor.sort()
-Methode gibt die Reihenfolge an, in der die Abfrage übereinstimmende Dokumente zurückgibt.
Angenommen, wir haben eine Sammlung namens employees
mit folgenden Dokumenten:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Hier ist ein Beispiel für die Rückgabe dieser Dokumente sortiert nach ihrem salary
Feld in aufsteigender Reihenfolge, sowie deren _id
Feld:
db.employees.find().sort( { salary: 1, _id: 1 } )
Ergebnis:
{ "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Hier haben wir 1
verwendet für aufsteigende Reihenfolge. Wenn wir es in absteigender Reihenfolge wollten, würden wir einfach -1
verwenden stattdessen.
Der Grund, warum ich die _id
eingefügt habe Feld in der Reihenfolge steht da, wenn zwei oder mehr Mitarbeiter das gleiche Gehalt haben, dann die _id
Feld kann verwendet werden, um diese Dokumente untereinander zu sortieren.
Dies mag zwar trivial erscheinen, verhindert jedoch, dass MongoDB diese Dokumente bei jeder Ausführung der Abfrage in einer anderen Reihenfolge zurückgibt.
Sie können auch die Ergebnisse eines $text
sortieren Suche. Siehe MongoDB sort()
für ein Beispiel.
Der $sort
Phase der Aggregationspipeline
Wenn Sie das Aggregations-Pipeline-Framework verwenden, können Sie $sort
verwenden Stage, um alle Eingabedokumente zu sortieren und sie in sortierter Reihenfolge an die Pipeline zurückzugeben.
So können wir $sort
verwenden um das gleiche Ergebnis wie im vorherigen Beispiel zurückzugeben. Außer, sortieren wir sie absteigend diesmal bestellen:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Ergebnis:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 }
Sie können auch die Ergebnisse eines $text
sortieren Suche. Siehe MongoDB $sort
für ein Beispiel.
Der $orderBy
Abfragemodifikator
Der $orderBy
Der Abfragemodifikator kann in einer von zwei Formen verwendet werden.
So:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Oder so::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
Der $orderBy
Der Abfragemodifikator wurde im mongo
als veraltet markiert Shell seit v3.2, aber ich habe mich trotzdem entschieden, sie hier einzufügen. Weitere Informationen finden Sie in der MongoDB-Dokumentation.