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.