sql >> Databasteknik >  >> NoSQL >> MongoDB

3 sätt att sortera dokument i MongoDB

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.


  1. Relationellt DB i minnet?

  2. Något som en tagg-cache och frågar efter den för att föreslå dem att använda Redis

  3. Mongoose, CastError:Cast to Array misslyckades för värde när man försökte spara en modell som innehåller en modell

  4. Driftsättning och underhåll av MongoDB med Ansible