sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - Sortera resultaten av en fråga

I MongoDB kan du sortera resultaten av en fråga genom att använda limit() metod.

I MongoDB, när du frågar en samling med db.collection.find() metoden kan du lägga till sort() metod för att specificera hur resultaten ska sorteras. sort() metod anger en sorteringsordning för markören.

När du använder sort() metod måste du ange sorteringsordningen som en parameter. Detta måste vara ett JSON-dokument som definierar sorteringsordningen. Det kommer vanligtvis att innehålla ett eller flera fält, vart och ett följt av antingen 1 eller -1 , beroende på om sorteringen ska vara i stigande eller fallande ordning.

Exempel

Låt oss först göra en fråga utan med sort() (så att vi kan se den naturliga sorteringsordningen):

Utan sort()

db.musicians.find( )

Resultat:

{ "_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 }

Med sort() i stigande ordning

Ett värde på 1 bredvid ett fältnamn anger att dokumenten ska sorteras efter det angivna fältet i stigande ordning.

Här sorterar vi resultaten efter namn i stigande ordning:

db.musicians.find( ).sort( { name: 1 } )

Resultat:

{ "_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 }

Med sort() i fallande ordning

Ett värde på -1 bredvid ett fältnamn anger fallande ordning.

Här sorterar vi resultaten efter namn i fallande ordning:

db.musicians.find( ).sort( { name: -1 } )

Resultat:

{ "_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 }

Flera fält

Du kan sortera efter flera fält. Separera bara varje fält med ett kommatecken. När du gör detta kommer dokumenten att sorteras efter det första angivna fältet, sedan det nästa, och så vidare.

Här sorterar vi efter instrumentet fältet, följt av född fält. Om två eller flera musiker spelar samma instrument, född fältet bestämmer hur de är sorterade i förhållande till varandra.

db.musicians.find( ).sort( { instrument: 1, born: 1 } )

Resultat:

{ "_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 }

Och bara för att se hur det andra fältet kan påverka ordningen, byt det till ett negativt värde (fallande):

db.musicians.find( ).sort( { instrument: 1, born: -1 } )

Resultat:

{ "_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" }

Sortera med gräns

Du kan använda sort() med limit() för att sortera resultaten av den begränsade resultatuppsättningen.

Här begränsar vi resultaten till 3 dokument:

db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )

Resultat:

{ "_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 }

Om vi ​​byter namn till fallande ordning:

db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )

Resultat:

{ "_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 }

Observera att i det här fallet, född har ingen effekt, eftersom det aldrig finns mer än ett resultat för ett visst namn.

Jämföra olika typer

När man jämför värden för olika BSON-typer använder MongoDB följande jämförelseordning, från lägsta till högsta:

  1. MinKey (intern typ)
  2. Null
  3. Siffror (ints, longs, doubles)
  4. Symbol, sträng
  5. Objekt
  6. Array
  7. BinData
  8. ObjectId
  9. Boolesk
  10. Datum
  11. Tidsstämpel
  12. Reguljärt uttryck
  13. MaxKey (intern typ)

Observera att icke-existerande fält behandlas på samma sätt som ett nollvärde (eller tomt BSON-objekt).


  1. C# MongoDB.Driver GetServer är borta, vad nu?

  2. mongoose save vs insert vs create

  3. Hadoop – En Apache Hadoop-tutorial för nybörjare

  4. 5 sätt att få timmen från en dejt i MongoDB