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

MongoDB - Ordina i risultati di una query

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:

  1. MinKey (tipo interno)
  2. Nulla
  3. Numeri (int, long, double)
  4. Simbolo, Stringa
  5. Oggetto
  6. Matrice
  7. BinData
  8. ID oggetto
  9. Booleano
  10. Data
  11. Data e ora
  12. Espressione regolare
  13. MaxKey (tipo interno)

Nota che i campi inesistenti vengono trattati come un valore nullo (o un oggetto BSON vuoto).