In MongoDB, puoi ordinare i risultati di una query usando limit()
metodo.
In MongoDB, quando esegui query su una raccolta utilizzando db.collection.find()
metodo, puoi aggiungere il sort()
metodo per specificare come devono essere ordinati i risultati. Il sort()
il metodo specifica un ordinamento per il cursore.
Quando si utilizza sort()
metodo, è necessario fornire l'ordinamento come parametro. Deve essere un documento JSON che definisce l'ordinamento. In genere conterrà uno o più campi, ciascuno seguito da 1
o -1
, a seconda che l'ordinamento debba essere crescente o decrescente.
Esempio
Per prima cosa facciamo una query senza usando sort()
(così possiamo vedere l'ordinamento naturale):
Senza sort()
db.musicians.find( )
Risultato:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Con sort()
in ordine crescente
Un valore di 1
accanto al nome di un campo specifica che i documenti devono essere ordinati in base al campo specificato in ordine crescente.
Qui ordiniamo i risultati per nome in ordine crescente:
db.musicians.find( ).sort( { name: 1 } )
Risultato:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Con sort()
in ordine decrescente
Un valore di -1
accanto al nome di un campo specifica l'ordine decrescente.
Qui ordiniamo i risultati per nome in ordine decrescente:
db.musicians.find( ).sort( { name: -1 } )
Risultato:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
Campi multipli
Puoi ordinare in base a più campi. Separa ogni campo con una virgola. Quando si esegue questa operazione, i documenti verranno ordinati in base al primo campo specificato, quindi al successivo e così via.
Qui, ordiniamo in base allo strumento campo, seguito dal nato campo. Se due o più musicisti suonano lo stesso strumento, il nato campo determina come essi sono ordinati l'uno rispetto all'altro.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Risultato:
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
E solo per vedere come il secondo campo può influenzare l'ordine, impostalo su un valore negativo (decrescente):
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Risultato:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
Ordina con limite
Puoi usare sort()
con limit()
per ordinare i risultati del set di risultati limitato.
Qui limitiamo i risultati a 3 documenti:
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Risultato:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
Se cambiamo nome in ordine decrescente:
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Risultato:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
Nota che in questo caso, nato non ha alcun effetto, poiché non c'è mai più di un risultato per un determinato nome.
Confronto di diversi tipi
Quando si confrontano valori di diversi tipi BSON, MongoDB utilizza il seguente ordine di confronto, dal più basso al più alto:
- MinKey (tipo interno)
- Nulla
- Numeri (int, long, double)
- Simbolo, Stringa
- Oggetto
- Matrice
- BinData
- ID oggetto
- Booleano
- Data
- Data e ora
- Espressione regolare
- MaxKey (tipo interno)
Nota che i campi inesistenti vengono trattati come un valore nullo (o un oggetto BSON vuoto).