MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

3 modi per ordinare i documenti in MongoDB

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.