Reklama

Agregační operace zpracovávají datové záznamy a vracejí vypočtené výsledky. Agregační operace seskupují hodnoty z více dokumentů dohromady a mohou nad seskupenými daty provádět různé operace a vracet jeden výsledek. V SQL count(*) a s group by je ekvivalentem agregace v MongoDB.

Metoda aggregate()

Pro agregaci v MongoDB byste měli použít metodu aggregate().

Syntaxe

Základní syntaxe metody aggregate() je následující –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Příklad

V kolekci máte následující data –

{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: , likes: 750},

Nyní z uvedené kolekce, chcete zobrazit seznam s uvedením, kolik návodů napsal každý uživatel, pak použijete následující metodu aggregate() –

> db.mycol.aggregate(){ "_id" : "tutorials point", "num_tutorial" : 2 }{ "_id" : "Neo4j", "num_tutorial" : 1 }>

Evivalentní dotaz pro výše uvedený případ použití bude select by_user, count(*) from mycol group by_user.

V uvedeném příkladu jsme seskupili dokumenty podle pole by_user a při každém výskytu by_user se zvýší předchozí hodnota součtu. Následuje seznam dostupných agregačních výrazů.

Výraz Popis Příklad
$sum Sčítá definovanou hodnotu ze všech dokumentů v kolekci. db.mycol.aggregate()
$avg Vypočítá průměr všech zadaných hodnot ze všech dokumentů v kolekci. db.mycol.aggregate()
$min Zjistí minimum příslušných hodnot ze všech dokumentů v kolekci. db.mycol.aggregate()
$max Získá maximum odpovídajících hodnot ze všech dokumentů v kolekci. db.mycol.aggregate()
$push Vloží hodnotu do pole ve výsledném dokumentu. db.mycol.aggregate()
$addToSet Vloží hodnotu do pole ve výsledném dokumentu, ale nevytvoří duplicity. db.mycol.aggregate()
$first Získá první dokument ze zdrojových dokumentů podle seskupení. Obvykle to má smysl pouze spolu s nějakým dříve použitým „$sort“-stupněm. db.mycol.aggregate()
$last Získá poslední dokument ze zdrojových dokumentů podle seskupení. Obvykle to má smysl jen spolu s nějakým dříve použitým „$sort“-stupněm. db.mycol.aggregate()

Pipeline Koncept

V příkazech UNIXu znamená shell pipeline možnost provést operaci na nějakém vstupu a výstup použít jako vstup pro další příkaz atd. Stejný koncept podporuje i MongoDB v rámci agregace. Existuje množina možných fází a každá z nich je brána jako množina dokumentů na vstupu a vytváří výslednou množinu dokumentů (nebo konečný výsledný dokument JSON na konci pipeline). Ten pak může být zase použit pro další etapu a tak dále.

Následující jsou možné etapy v agregačním rámci –

  • $projekt – Slouží k výběru některých konkrétních polí z kolekce.

  • $match – Jedná se o filtrační operaci, a proto může snížit množství dokumentů, které jsou zadány jako vstup do další fáze.

  • $group – Provádí vlastní agregaci, jak bylo uvedeno výše.

  • $sort – Třídí dokumenty.

  • $skip – Pomocí této funkce je možné přeskočit v seznamu dokumentů dopředu pro dané množství dokumentů.

  • $limit – Omezí množství prohlížených dokumentů o daný počet počínaje aktuálními pozicemi.

  • $unwind – Slouží k rozbalení dokumentů, které používají pole. Při použití pole jsou data jakoby předem spojena a tato operace se tímto zruší, aby byly opět k dispozici jednotlivé dokumenty. Tímto krokem tedy zvýšíme množství dokumentů pro další krok.

Reklama

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.