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

3 způsoby, jak třídit dokumenty v MongoDB

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.


  1. Java Client pro připojení ElasticCache Redis Cache Node

  2. Redis se váže na více než jednu IP

  3. Vytváření nových sbírek Meteor za běhu

  4. MongoDB Regular Expression Search – začíná používáním javascriptového ovladače a NodeJS