Aggregointioperaatiot

Aggregointioperaatiot käsittelevät tietueita ja palauttavat laskettuja tuloksia. Aggregaatio-operaatiot ryhmittelevät useiden asiakirjojen arvot yhteen ja voivat suorittaa ryhmitellyille tiedoille erilaisia operaatioita yhden tuloksen palauttamiseksi. SQL:ssä count(*) ja with group by vastaa MongoDB:n aggregaatiota.

Metodi aggregate()

MongoDB:ssä aggregaatioon kannattaa käyttää aggregate()-metodia.

Syntaksi

Aggregate()-metodin perussyntaksi on seuraava –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Esimerkki

Kokoelmassa on seuraavat tiedot –

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

Nyt yllä olevasta kokoelmasta, jos haluat näyttää listan, jossa ilmoitetaan, kuinka monta opetusohjelmaa kukin käyttäjä on kirjoittanut, niin käytät seuraavaa aggregate()-metodia –

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

Sql vastaava kysely yllä olevalle käyttötapaukselle on select by_user, count(*) from mycol group by_user.

Yllä olevassa esimerkissä olemme ryhmitelleet dokumentit kentän by_user mukaan ja jokaisella by userin esiintymisellä summan edellistä arvoa kasvatetaan. Seuraavassa on luettelo käytettävissä olevista aggregointi-ilmauksista.

Expression Description Example
$sum Summaa määritellyn arvon kaikista kokoelman asiakirjoista. db.mycol.aggregate()
$avg Lasketaan annettujen arvojen keskiarvo kaikista kokoelman asiakirjoista. db.mycol.aggregate()
$min Saa kokoelman kaikkien asiakirjojen vastaavien arvojen minimiarvon. db.mycol.aggregate()
$max Noutaa kokoelman kaikkien asiakirjojen vastaavien arvojen maksimiarvon. db.mycol.aggregate()
$push Sisällyttää tuloksena syntyvään asiakirjan arvomääritykseen (array). db.mycol.aggregate()
$addToSet Sisältää arvon arrayyn tuloksena syntyvässä asiakirjassa, mutta ei luo kaksoiskappaleita. db.mycol.aggregate()
$first Noutaa lähdedokumenteista ensimmäisenä tuloksena syntyvän asiakirjan ryhmittelyn mukaisesti. Tyypillisesti tämä on järkevää vain yhdessä jonkin aiemmin sovelletun ”$sort”-vaiheen kanssa. db.mycol.aggregate()
$last Noutaa lähdedokumenteista viimeisen dokumentin ryhmittelyn mukaan. Tyypillisesti tämä on järkevää vain yhdessä jonkin aiemmin sovelletun ”$sort”-vaiheen kanssa. db.mycol.aggregate()

Pipeline-käsite

UNIX-komennossa komentotulkin putkisto (engl. shell pipeline) tarkoittaa mahdollisuutta suorittaa operaatio jollakin syötteellä ja käyttää tulostetta seuraavan komennon syötteenä jne. MongoDB tukee samaa käsitettä myös aggregointikehyksessä. On olemassa joukko mahdollisia vaiheita ja kukin niistä ottaa syötteenä joukon dokumentteja ja tuottaa tuloksena joukon dokumentteja (tai lopullisen tuloksena olevan JSON-dokumentin putken lopussa). Tätä voidaan puolestaan käyttää seuraavassa vaiheessa ja niin edelleen.

Seuraavat ovat aggregointikehyksen mahdollisia vaiheita –

  • $project – Käytetään joidenkin tiettyjen kenttien valitsemiseen kokoelmasta.

  • $match – Tämä on suodatusoperaatio, ja näin voidaan vähentää seuraavaan vaiheeseen syötettävien asiakirjojen määrää.

  • $group – Tämä tekee varsinaisen aggregoinnin, kuten edellä on käsitelty.

  • $sort – Lajittelee dokumentit.

  • $skip – Tämän avulla voidaan ohittaa eteenpäin dokumenttiluettelossa tietyn dokumenttimäärän osalta.

  • $limit – Tällä rajoitetaan tarkasteltavien asiakirjojen määrää annetulla määrällä nykyisistä paikoista alkaen.

  • $unwind – Tällä puretaan asiakirjoja, jotka käyttävät matriiseja. Kun käytetään arraya, data on tavallaan valmiiksi yhdistetty ja tämä operaatio kumotaan tällä, jotta saadaan taas yksittäiset dokumentit. Näin ollen tämän vaiheen avulla lisäämme asiakirjojen määrää seuraavaa vaihetta varten.

Advertisements

Vastaa

Sähköpostiosoitettasi ei julkaista.