sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB - Řazení výsledků dotazu

V MongoDB můžete třídit výsledky dotazu pomocí limit() metoda.

Když v MongoDB zadáte dotaz na kolekci pomocí db.collection.find() můžete přidat sort() způsob, jak určit, jak mají být výsledky seřazeny. sort() metoda určuje pořadí řazení pro kurzor.

Při použití sort() musíte jako parametr zadat pořadí řazení. Musí se jednat o dokument JSON, který definuje pořadí řazení. Obvykle bude obsahovat jedno nebo více polí, za každým následuje buď 1 nebo -1 , v závislosti na tom, zda má být řazení ve vzestupném nebo sestupném pořadí.

Příklad

Nejprve proveďte dotaz bez pomocí sort() (abychom viděli přirozené pořadí řazení):

Bez sort()

db.musicians.find( )

Výsledek:

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

Pomocí sort() ve vzestupném pořadí

Hodnota 1 vedle názvu pole určuje, že dokumenty mají být seřazeny podle zadaného pole vzestupně.

Zde seřadíme výsledky podle názvu ve vzestupném pořadí:

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

Výsledek:

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

Pomocí sort() v sestupném pořadí

Hodnota -1 vedle názvu pole určuje sestupné pořadí.

Zde seřadíme výsledky podle názvu v sestupném pořadí:

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

Výsledek:

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

Více polí

Můžete třídit podle více polí. Stačí oddělit každé pole čárkou. Když to uděláte, dokumenty se seřadí podle prvního zadaného pole, pak podle dalšího a tak dále.

Zde třídíme podle nástroje pole, za nímž následuje born pole. Pokud dva nebo více hudebníků hraje na stejný nástroj, born pole určuje, jak oni jsou seřazeny vůči sobě navzájem.

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

Výsledek:

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

A abyste viděli, jak může druhé pole ovlivnit pořadí, přepněte jej na zápornou hodnotu (sestupně):

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

Výsledek:

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

Řadit s limitem

Můžete použít sort() s limit() seřadit výsledky omezené sady výsledků.

Zde omezíme výsledky na 3 dokumenty:

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

Výsledek:

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

Pokud přepneme název sestupně:

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

Výsledek:

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

Všimněte si, že v tomto případě nar nemá žádný účinek, protože pro dané jméno není nikdy více než jeden výsledek.

Porovnání různých typů

Při porovnávání hodnot různých typů BSON používá MongoDB následující pořadí porovnání, od nejnižší po nejvyšší:

  1. MinKey (interní typ)
  2. Nulé
  3. Čísla (ints, longs, double)
  4. Symbol, řetězec
  5. Objekt
  6. Pole
  7. BinData
  8. ObjectId
  9. Booleovská hodnota
  10. Datum
  11. Časové razítko
  12. Regulární výraz
  13. MaxKey (interní typ)

Všimněte si, že s neexistujícími poli se zachází stejně jako s hodnotou null (nebo prázdným objektem BSON).


  1. Spark-on-HBase:Konektor HBase založený na DataFrame

  2. Připojení MongoDB k Ruby pomocí certifikátů s vlastním podpisem pro SSL

  3. Jak mohu zastavit redis-server?

  4. Jak aktualizovat více prvků pole v mongodb