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.