sql >> Database >  >> NoSQL >> MongoDB

3 manieren om documenten te sorteren in MongoDB

MongoDB biedt een aantal manieren om documenten in een bepaalde volgorde te sorteren. Elk van deze stelt ons in staat om de documenten in oplopende of aflopende volgorde te ordenen.

Er is ook de mogelijkheid om de resultaten van een $text . te bestellen zoeken – sorteren op de berekende textScore metagegevens in aflopende volgorde.

Hier zijn 3 manieren om documenten in MongoDB te sorteren.

De cursor.sort() Methode

De cursor.sort() methode specificeert de volgorde waarin de zoekopdracht overeenkomende documenten retourneert.

Stel dat we een verzameling hebben met de naam employees met de volgende documenten:

{ "_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 is een voorbeeld van het retourneren van die documenten gesorteerd op salary veld in oplopende volgorde, en ook hun _id veld:

db.employees.find().sort( { salary: 1, _id: 1 } )

Resultaat:

{ "_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 gebruikten we 1 voor oplopende volgorde. Als we het in aflopende volgorde willen hebben, gebruiken we gewoon -1 in plaats daarvan.

De reden waarom ik de _id . heb toegevoegd veld in de bestelling is omdat, als twee of meer werknemers hetzelfde salaris hebben, de _id veld kan worden gebruikt om die documenten onderling te sorteren.

Hoewel dit misschien triviaal lijkt, voorkomt het dat MongoDB die documenten elke keer dat we de query uitvoeren in een andere volgorde retourneert.

U kunt ook de resultaten van een $text zoekopdracht. Zie MongoDB sort() voor een voorbeeld.

De $sort Aggregatiepijplijnfase

Wanneer u het aggregatiepijplijnraamwerk gebruikt, kunt u de $sort . gebruiken om alle invoerdocumenten te sorteren en ze in gesorteerde volgorde terug te sturen naar de pijplijn.

Hier is hoe we $sort kunnen gebruiken om hetzelfde resultaat als in het vorige voorbeeld te retourneren. Behalve, laten we ze sorteren op aflopend bestel deze keer:

db.employees.aggregate(
   [
     { $sort : { salary : -1, _id: 1 } }
   ]
)

Resultaat:

{ "_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 }

U kunt ook de resultaten van een $text zoekopdracht. Zie MongoDB $sort voor een voorbeeld.

De $orderBy Zoekopdrachtmodificatie

De $orderBy query modifier kan in twee vormen worden gebruikt.

Zoals dit:

db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )

Of zo::

db.employees.find()._addSpecial( "$orderby", { salary : 1 } )

De $orderBy query-modifier is verouderd in de mongo shell sinds v3.2, maar ik besloot het toch hier op te nemen. Zie de MongoDB-documentatie voor meer informatie.


  1. MongoDB:update elk document op één veld

  2. Waarom moet ik Redis-verbindingen sluiten of open houden?

  3. Databasegebruikersbeheer met ClusterControl

  4. MongoDB SSPL-licentiewijzigingsupdate