Kuinka analysoida ja suodattaa tietokantoja MongoDB-aggregaatiolla
MongoDB:n aggregointi on arvokas työkalu tietokantojen analysointiin ja suodattamiseen. Putkijärjestelmän avulla on mahdollista määrittää kyselyitä, mikä mahdollistaa erittäin räätälöidyt tulokset.
Mitä on aggregointi MongoDB:ssä?
MongoDB on ei-relaationaalinen ja asiakirjoihin perustuva tietokanta, joka on suunniteltu käytettäväksi suurten ja monipuolisten tietomäärien kanssa. Luopumalla jäykistä taulukoista ja käyttämällä tekniikoita kuten sharding (tietojen tallentaminen eri solmuihin), NoSQL-ratkaisu voi skaalautua vaakasuunnassa säilyttäen samalla suurta joustavuutta ja vikasietoisuutta.
BSON-binaarimuotoiset JSON-tiedostot on koottu kokoelmiin, ja niitä voidaan hakea ja muokata MongoDB Query Language (MQL) -kielellä. Vaikka tämä kieli tarjoaa monia vaihtoehtoja, se ei sovellu (tai ei ehkä sovellu tarpeeksi hyvin) tietojen analysointiin. Siksi MongoDB tarjoaa aggregoinnin.
Tietotekniikassa tämä termi viittaa erilaisiin prosesseihin. MongoDB:ssä aggregointi tarkoittaa tietojen analysointia ja yhteenvetoa käyttämällä erilaisia operaatioita yhden selkeän tuloksen tuottamiseksi. Tämän prosessin aikana yhden tai useamman dokumentin tiedot analysoidaan ja suodatetaan käyttäjän määrittelemien tekijöiden mukaan.
Seuraavissa osioissa tarkastelemme paitsi MongoDB-aggregaation tarjoamia mahdollisuuksia kattavaan data-analyysiin, myös annamme esimerkkejä siitä, miten voit käyttää aggregate ( ) tietokannan hallintajärjestelmässä.
Mitä tarvitsen MongoDB-aggregaatiota varten?
MongoDB:ssä aggregoinnin käyttöön on vain muutamia vaatimuksia. Menetelmä suoritetaan komentotulkissa ja toimii loogisten sääntöjen mukaisesti, jotka voit räätälöidä analyysisi tarpeiden mukaan.
Jotta voit käyttää aggregointia Mongo DB:ssä, sinun on asennettava MongoDB tietokoneellesi. Jos se ei ole vielä asennettu, voit lukea kattavasta MongoDB-oppaastamme, miten voit ladata, asentaa ja käyttää tietokantaa.
Käytä myös tehokasta palomuuria ja varmista, että tietokanta on määritetty kaikkien nykyisten turvallisuusstandardien mukaisesti. Aggregaation suorittaminen MongoDB:ssä edellyttää järjestelmänvalvojan oikeuksia.
Tietokanta toimii kaikilla alustoilla, joten alla kuvatut vaiheet koskevat kaikkia käyttöjärjestelmiä.
Mikä on MongoDB-aggregaatiokehyksen putki?
MongoDB:ssä voit suorittaa yksinkertaisia hakuja tai kyselyjä, ja tietokanta näyttää tulokset välittömästi. Tämä menetelmä on kuitenkin hyvin rajoitettu, koska se voi näyttää vain tuloksia, jotka jo ovat tallennettujen asiakirjojen sisällä. Tämän tyyppistä kyselyä ei ole tarkoitettu syvälliseen analyysiin, toistuvien mallien etsimiseen tai lisätietojen hankkimiseen.
Joskus tietokannan eri lähteet on otettava huomioon, jotta voidaan tehdä merkityksellisiä johtopäätöksiä. MongoDB-aggregaatiota käytetään tällaisissa tilanteissa. Tällaisten tulosten saavuttamiseksi aggregate ( ) menetelmässä käytetään putkistoja.
Putkilinjan rooli
MongoDB:n aggregointiputket ovat prosesseja, joissa olemassa olevia tietoja analysoidaan ja suodatetaan eri vaiheiden avulla, jotta käyttäjille voidaan näyttää heidän etsimänsä tulos. Näitä vaiheita kutsutaan vaiheiksi. Vaatimuksista riippuen voidaan käynnistää yksi tai useampi vaihe. Ne suoritetaan peräkkäin ja muuttavat alkuperäistä syötettäsi, jotta lopputulos (etsimäsi tiedot) voidaan näyttää lopussa.
Vaikka syöte koostuu lukuisista tiedoista, tulos (eli lopputulos) on yksittäinen. Selitämme MongoDB-aggregaation eri vaiheet myöhemmin tässä osiossa.
MongoDB-aggregaatioputken syntaksi
Ensinnäkin on syytä tarkastella lyhyesti MongoDB:n aggregoinnin syntaksia. Menetelmä on aina rakennettu saman mallin mukaan ja sitä voidaan mukauttaa asiakkaan erityistarpeisiin. Perusrakenne on seuraavanlainen:
db.collection_name.aggregate ( pipeline, options )shellTässä collection_name on kyseisen kokoelman nimi. MongoDB-aggregaation vaiheet on lueteltu kohdassa pipeline. options voidaan käyttää lisäparametreille, jotka määrittelevät tulostuksen.
Putkilinjan vaiheet
MongoDB:n aggregointiputkessa on lukuisia vaiheita. Suurinta osaa niistä voidaan käyttää useita kertoja putken sisällä. Kaikkien vaihtoehtojen luetteleminen tässä artikkelissa olisi liian laaja tehtävä, varsinkin kun jotkut vaihtoehdot ovat tarpeen vain hyvin erityisissä toiminnoissa. Jotta saatte kuitenkin käsityksen vaiheista, luettelemme tässä muutamia useimmin käytettyjä vaihtoehtoja:
$count: Tässä vaiheessa saat tiedon siitä, kuinka monta BSON-asiakirjaa on otettu huomioon kyseisessä vaiheessa tai vaiheissa.$group: Tässä vaiheessa asiakirjat lajitellaan ja niputetaan tiettyjen parametrien mukaan.$limit: Rajoittaa putken seuraavaan vaiheeseen siirrettävien dokumenttien määrää.$match: $match-vaiheen avulla rajoitat seuraavassa vaiheessa käytettäviä asiakirjoja.$out: Tässä vaiheessa MongoDB-aggregaation tulokset sisällytetään kokoelmaan. Tätä vaihetta voidaan käyttää vain putkilinjan lopussa.$project: Käytä $project-vaihetta valitaksesi tiettyjä kenttiä kokoelmasta.$skip: Tässä vaiheessa ohitetaan tietty määrä asiakirjoja. Voit määrittää tämän vaihtoehdolla.$sort: Tämä toiminto lajittelee asiakirjat käyttäjän kokoelmassa. Asiakirjoja ei kuitenkaan muuteta tämän lisäksi.$unset: $unset sulkee pois tietyt kentät. Se tekee päinvastoin kuin $project.
Esimerkki aggregoinnista MongoDB:ssä
Jotta voisit paremmin ymmärtää, miten aggregointi MongoDB:ssä toimii, esittelemme sinulle muutamia esimerkkejä eri vaiheista ja niiden käytöstä. Käyttääksesi MongoDB-aggregointia, avaa komentorivi järjestelmänvalvojana. Normaalisti testitietokanta näkyy ensimmäisenä. Jos haluat käyttää eri tietokantaa, käytä komentoa use.
Tässä esimerkissä kuvitellaan tietokanta, joka sisältää tietoja asiakkaista, jotka ovat ostaneet tietyn tuotteen. Yksinkertaisuuden vuoksi tietokannassa on vain kymmenen asiakirjaa, jotka ovat kaikki rakenteeltaan samanlaisia:
{
"name" : "Smith",
"city" : "Glasgow",
"country" : "Scotland",
"quantity" : 14
}shellSeuraavat tiedot asiakkaista on sisällytetty: heidän nimensä, asuinpaikkansa, maansa ja ostamiensa tuotteiden lukumäärä.
Jos haluat kokeilla aggregointia MongoDB:ssä, voit käyttää menetelmää insertMany ( ) lisätäksesi kaikki asiakasdataa sisältävät dokumentit kokoelmaan nimeltä ”customers”:
db.customers.insertMany ( [
{ "name" : "Smith", "city" : "Glasgow", "country" : "Scotland", "quantity" : 14 },
{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )shellNäkyviin tulee luettelo kunkin asiakirjan objektitunnuksista.
Kuinka käyttää $match-komentoa
MongoDB:n aggregointimahdollisuuksien havainnollistamiseksi sovellamme ensin $match-vaihetta asiakkaiden kokoelmaan. Ilman lisäparametreja tämä tuottaa yksinkertaisesti yllä luetellun täydellisen luettelon asiakastiedoista.
Seuraavassa esimerkissä olemme kuitenkin antaneet sille ohjeen näyttää vain italialaiset asiakkaat. Tässä on komento:
db.customers.aggregate ( [
{ $match : { "country" : "Italy" } }
] )shellNyt näytetään vain kahden italialaisen asiakkaan objektitunnukset ja tiedot.
Käytä $sort-komentoa paremman yleiskuvan saamiseksi
Jos haluat järjestää asiakastietokantasi, voit käyttää $sort-vaihetta. Seuraavassa esimerkissä ohjeistamme järjestelmää lajittelemaan kaikki asiakastiedot ostettujen yksiköiden määrän mukaan, alkaen suurimmasta määrästä. Syöte näyttää tältä:
db.customers.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )shellRajoita tulostus $project-komennolla
Tähän mennessä käytettyjen vaiheiden avulla tulos on suhteellisen laaja. Esimerkiksi asiakirjojen varsinaisten tietojen lisäksi myös objektin tunnus tulostetaan aina. MongoDB-aggregaatioputkessa voit käyttää $project-komentoa määrittääksesi, mitkä tiedot tulostetaan. Tätä varten asetamme arvon 1 pakollisille kentille ja arvon 0 kentille, joita ei tarvitse sisällyttää tulostukseen. Esimerkissämme haluamme nähdä vain asiakkaan nimen ja ostettujen tuotteiden lukumäärän. Tätä varten syötämme seuraavan:
db.customers.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )shellYhdistä useita vaiheita aggregoinnilla MongoDB:ssä
MongoDB-aggregaatiossa on myös mahdollista soveltaa useita vaiheita peräkkäin. Nämä suoritetaan sitten yksi toisensa jälkeen, ja lopuksi saadaan tulos, jossa kaikki halutut parametrit on otettu huomioon. Jos esimerkiksi haluat näyttää vain skotlantilaisten asiakkaiden nimet ja ostokset laskevassa järjestyksessä, voit käyttää edellä kuvattuja vaiheita seuraavasti:
db.customers.aggregate ( [
{ $match : { "country" : "Scotland" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )shellc067e5f69d02a3c1a1a58911f79850cc