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.