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

3 Möglichkeiten zum Sortieren von Dokumenten in MongoDB

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.