MongoDB poskytuje několik způsobů, jak seřadit dokumenty v určitém pořadí. Každý z nich nám umožňuje seřadit dokumenty ve vzestupném nebo sestupném pořadí.
Je zde také možnost objednat výsledky $text
vyhledávání – řazení podle vypočteného textScore
metadata v sestupném pořadí.
Zde jsou 3 způsoby, jak třídit dokumenty v MongoDB.
cursor.sort()
Metoda
cursor.sort()
metoda určuje pořadí, ve kterém dotaz vrací odpovídající dokumenty.
Předpokládejme, že máme kolekci nazvanou employees
s následujícími dokumenty:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Zde je příklad vrácení těchto dokumentů seřazených podle jejich salary
pole ve vzestupném pořadí a také jejich _id
pole:
db.employees.find().sort( { salary: 1, _id: 1 } )
Výsledek:
{ "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Zde jsme použili 1
pro vzestupné pořadí. Pokud bychom to chtěli v sestupném pořadí, jednoduše bychom použili -1
místo toho.
Důvod, proč jsem zahrnul _id
pole v objednávce je způsobeno tím, že pokud mají dva nebo více zaměstnanců stejný plat, pak _id
pole lze použít k řazení těchto dokumentů mezi sebou.
I když se to může zdát triviální, zabrání to MongoDB vracet tyto dokumenty v jiném pořadí pokaždé, když spustíme dotaz.
Můžete také seřadit výsledky $text
Vyhledávání. Viz MongoDB sort()
pro příklad.
$sort
Fáze agregačního kanálu
Při použití rámce agregačního kanálu můžete použít $sort
fáze k setřídění všech vstupních dokumentů a jejich vrácení do kanálu v seřazeném pořadí.
Zde je návod, jak můžeme použít $sort
vrátit stejný výsledek jako v předchozím příkladu. Až na to, seřaďme je sestupně objednejte tentokrát:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Výsledek:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 }
Můžete také seřadit výsledky $text
Vyhledávání. Viz MongoDB $sort
pro příklad.
$orderBy
Modifikátor dotazu
$orderBy
modifikátor dotazu lze použít v jedné ze dvou forem.
Takhle:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
Nebo takto::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
$orderBy
Modifikátor dotazu byl v mongo
zastaralý shell od verze 3.2, ale přesto jsem se rozhodl jej sem zahrnout. Další informace naleznete v dokumentaci MongoDB.