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.