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

MongoDB - Sorter resultaterne af en forespørgsel

I MongoDB kan du sortere resultaterne af en forespørgsel ved at bruge limit() metode.

I MongoDB, når du forespørger en samling ved hjælp af db.collection.find() metode, kan du tilføje sort() metode til at specificere, hvordan resultaterne skal sorteres. sort() metoden angiver en sorteringsrækkefølge for markøren.

Når du bruger sort() metode, skal du angive sorteringsrækkefølgen som en parameter. Dette skal være et JSON-dokument, der definerer sorteringsrækkefølgen. Det vil typisk indeholde et eller flere felter, hver efterfulgt af enten 1 eller -1 , alt efter om sorteringen skal være i stigende eller faldende rækkefølge.

Eksempel

Lad os først lave en forespørgsel uden ved hjælp af sort() (så vi kan se den naturlige sorteringsrækkefølge):

Uden 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 stigende rækkefølge

En værdi på 1 ud for et feltnavn angiver, at dokumenterne skal sorteres efter det angivne felt i stigende rækkefølge.

Her sorterer vi resultaterne efter navn i stigende rækkefølge:

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 faldende rækkefølge

En værdi på -1 ud for et feltnavn angiver faldende rækkefølge.

Her sorterer vi resultaterne efter navn i faldende rækkefølge:

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 }

Flere felter

Du kan sortere efter flere felter. Bare adskil hvert felt med et komma. Når du gør dette, vil dokumenterne blive sorteret efter det første angivne felt, derefter det næste, og så videre.

Her sorterer vi efter instrumentet felt efterfulgt af født Mark. Hvis to eller flere musikere spiller det samme instrument, er den fødte feltet bestemmer, hvordan de er sorteret i forhold til hinanden.

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 }

Og bare for at se, hvordan det andet felt kan påvirke rækkefølgen, skal du skifte det til en negativ værdi (faldende):

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

Sortér med grænse

Du kan bruge sort() med limit() for at sortere resultaterne af det begrænsede resultatsæt.

Her begrænser vi resultaterne til 3 dokumenter:

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 }

Hvis vi skifter navn i faldende rækkefølge:

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 }

Bemærk, at i dette tilfælde born har ingen effekt, da der aldrig er mere end ét resultat for et givet navn.

Sammenligning af forskellige typer

Når man sammenligner værdier af forskellige BSON-typer, bruger MongoDB følgende sammenligningsrækkefølge, fra laveste til højeste:

  1. MinKey (intern type)
  2. Nul
  3. Tal (ints, longs, doubles)
  4. Symbol, streng
  5. Objekt
  6. Array
  7. BinData
  8. ObjectId
  9. Boolesk
  10. Dato
  11. Tidsstempel
  12. Regulært udtryk
  13. MaxKey (intern type)

Bemærk, at ikke-eksisterende felter behandles på samme måde som en nulværdi (eller tomt BSON-objekt).


  1. MongoDB $concat

  2. WiredTiger og opdateringer på stedet

  3. Få alle feltnavne i en mongodb-samling?

  4. Konverter MongoDB BsonDocument til gyldig JSON i C#