MongoDB tillhandahåller några sätt att sortera dokument i en viss ordning. Var och en av dessa tillåter oss att beställa dokumenten i stigande eller fallande ordning.
Det finns också möjlighet att beställa resultaten av en $text
sök – sortering efter den beräknade textScore
metadata i fallande ordning.
Här är 3 sätt att sortera dokument i MongoDB.
cursor.sort()
Metod
cursor.sort()
metod anger i vilken ordning frågan returnerar matchande dokument.
Anta att vi har en samling som heter employees
med följande dokument:
{ "_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 }
Här är ett exempel på att returnera dessa dokument sorterade efter deras salary
fältet i stigande ordning, och även deras _id
fält:
db.employees.find().sort( { salary: 1, _id: 1 } )
Resultat:
{ "_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 }
Här använde vi 1
för stigande ordning. Om vi ville ha det i fallande ordning, skulle vi helt enkelt använda -1
istället.
Anledningen till att jag inkluderade _id
fältet i beställningen beror på att om två eller flera anställda har samma lön, då _id
kan användas för att sortera dessa dokument mellan sig.
Även om detta kan verka trivialt, kommer det att förhindra MongoDB från att returnera dessa dokument i en annan ordning varje gång vi kör frågan.
Du kan också sortera resultaten av en $text
Sök. Se MongoDB sort()
till exempel.
$sort
Aggregation Pipeline Stage
När du använder aggregeringspipelineramverket kan du använda $sort
steg för att sortera alla indatadokument och returnera dem till pipelinen i sorterad ordning.
Så här kan vi använda $sort
för att returnera samma resultat som föregående exempel. Förutom, låt oss sortera dem i fallande beställ den här gången:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Resultat:
{ "_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 }
Du kan också sortera resultaten av en $text
Sök. Se MongoDB $sort
till exempel.
$orderBy
Frågemodifierare
$orderBy
query modifier kan användas i en av två former.
Så här:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Eller så här::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
$orderBy
frågemodifierare har fasats ut i mongo
skal sedan v3.2, men jag bestämde mig för att ta med det här ändå. Se MongoDB-dokumentationen för mer information.