MongoDB fornisce alcuni modi per ordinare i documenti in un ordine particolare. Ognuno di questi ci consente di ordinare i documenti in ordine crescente o decrescente.
C'è anche la possibilità di ordinare i risultati di un $text ricerca – ordinamento in base al textScore calcolato metadati in ordine decrescente.
Ecco 3 modi per ordinare i documenti in MongoDB.
Il cursor.sort() Metodo
Il cursor.sort() il metodo specifica l'ordine in cui la query restituisce i documenti corrispondenti.
Supponiamo di avere una collezione chiamata employees con i seguenti documenti:
{ "_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 }
Ecco un esempio di restituzione di quei documenti ordinati in base al loro salary campo in ordine crescente e anche il loro _id campo:
db.employees.find().sort( { salary: 1, _id: 1 } ) Risultato:
{ "_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 }
Qui abbiamo usato 1 per ordine crescente. Se lo volessimo in ordine decrescente, useremmo semplicemente -1 invece.
Il motivo per cui ho incluso il _id campo nell'ordine è perché, se due o più dipendenti hanno lo stesso stipendio, allora il _id campo può essere utilizzato per ordinare i documenti tra loro.
Anche se questo può sembrare banale, impedirà a MongoDB di restituire quei documenti in un ordine diverso ogni volta che eseguiamo la query.
Puoi anche ordinare i risultati di un $text ricerca. Vedi MongoDB sort() per un esempio.
Il $sort Fase di aggregazione della pipeline
Quando si utilizza il framework della pipeline di aggregazione, è possibile utilizzare $sort fase per ordinare tutti i documenti di input e restituirli alla pipeline in ordine.
Ecco come possiamo usare $sort per restituire lo stesso risultato dell'esempio precedente. Tranne, ordiniamoli in decrescente ordina questa volta:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
) Risultato:
{ "_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 }
Puoi anche ordinare i risultati di un $text ricerca. Vedi MongoDB $sort per un esempio.
Il $orderBy Modificatore di query
Il $orderBy il modificatore di query può essere utilizzato in una delle due forme.
In questo modo:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } ) O così::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
Il $orderBy il modificatore di query è stato deprecato in mongo shell dalla v3.2, ma ho deciso di includerla comunque qui. Consulta la documentazione di MongoDB per ulteriori informazioni.