MongoDB-kyselyjen käyttö
MongoDB-kyselyjen avulla voit etsiä ja analysoida tietokantaasi nopeasti ja tehokkaasti. Menetelmän rakenne on looginen, ja sen kanssa voi käyttää lukuisia parametreja.
Kuinka etsiä kokoelmista tehokkaasti
Dokumenttipohjaisena NoSQL-ratkaisuna MongoDB tarjoaa käyttäjille mahdollisuuden tallentaa ja hallita helposti suuria ja monipuolisia tietomääriä. Tietokannan hallintajärjestelmä on erittäin joustava ja helposti vaakasuoraan skaalattavissa.
Toisin kuin relaatiotietokannoissa, Mongo DB:n tiedot tallennetaan BSON-dokumenteissa (binary JSON) ja kootaan kokoelmiin. Jotta tämä lähestymistapa todella toimisi, on tärkeää, ettäkäytössä on tehokkaat kyselymekanismit, jotka voivat seuloa tietokannan ja esittää käyttäjille tarvittavat tiedot. MongoDB-kyselyillä tietokanta voi jopa etsiä monimutkaisesti rakennetuista kokoelmista etsimäsi tiedot.
Onko MongoDB:n komentokehotteen käyttö liian monimutkaista? MongoDB Compass on ilmainen graafinen käyttöliittymä, joka helpottaa MongoDB:n käyttöä.
Mitä ovat MongoDB-kyselyt?
MongoDB-kyselyt ovat käyttäjäystävällinen työkalu monimutkaisten tietorakenteiden hakua varten. Ne noudattavat loogisia sääntöjä ja toimivat kuten useimmilla verkkosivustoilla olevat suodatinvaihtoehdot. Näin voit muotoilla haun mahdollisimman tarkasti ja saada parhaat mahdolliset tulokset. Tämä on erityisen tärkeää, koska MongoDB pystyy tallentamaan monenlaisia tietoja. Ilman tarvittavia suodatinvaihtoehtoja tietokannan hallinta olisi vaikeaa. Seuraavissa osioissa selitämme, mitä tarvitset MongoDB-kyselyjen luomiseen ja miten niitä käytetään.
Mitkä ovat MongoDB-kyselyjen vaatimukset?
MongoDB-kyselyjen käyttöön liittyy vain muutamia vaatimuksia.
- Tietokoneellasi on oltava asennettuna MongoDB. Tietokanta toimii useilla käyttöjärjestelmillä, joten alla olevat ohjeet toimivat riippumatta siitä, käytätkö Linuxia, OS X:ää tai Windowsia. Asennuksen jälkeiset vaiheet ovat samat kaikilla järjestelmillä ja koskevat vain itse tietokantaa. Asennuksen kulku selviää MongoDB-oppaastamme.
- Tarvitset järjestelmänvalvojan oikeudet, jotta voit käyttää hakutoimintoa.
- On suositeltavaa luoda testausympäristö, jotta voit kokeilla Mongo DB -kyselyjä riskittä.
Testikokoelman rakentaminen
Avaa ensin komentotulkki ja kirjaudu sisään järjestelmänvalvojana. Luo sitten uusi kokoelma, joka toimii testausympäristönä ensimmäisille MongoDB-kyselyillesi. Yksinkertaisten asiakirjojen hakujen lisäksi menetelmällä voidaan hakea myös taulukoita, erilaisia kenttiä ja upotettuja asiakirjoja, minkä vuoksi olemme päättäneet luoda hieman monimutkaisemman kokoelman. Näin saat paremman käsityksen MongoDB-kyselyjen laajuudesta.
Esimerkissämme on luettelo asiakkaista. Luettelon muoto on seuraava:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}shellTämä asiakirja sisältää seuraavat tiedot:
- nimi: Tavarat ostaneen yrityksen nimi.
- yksiköt: Yrityksen tilaamien tuotteiden kokonaismäärä.
- sijainti: Yrityksen sijainti. Jos yrityksellä on useita toimipisteitä, ne voidaan tallentaa taulukkomuodossa.
- transaktiot: Tämä kenttä sisältää lisäasiakirjan. Tällaisia asiakirjoja kutsutaan ”upotetuiksi asiakirjoiksi” tai ”sisäkkäisiksi asiakirjoiksi”. Jokainen transaktioasiakirja sisältää tietoja siitä, kuinka kauan yritys on ollut asiakas (kohdassa ”ensimmäinen”), milloin viimeinen tilaus tehtiin (kohdassa ”viimeinen”) ja kuinka monta kertaa yritys on tilannut tuotteita (kohdassa ”yhteensä”).
Tässä esimerkissä olemme lisänneet lisäasiakirjoja, jotta tietojen lisääminen myöhemmin on helpompaa. Näin varmistetaan hyvä yleiskuva tietokannan tiedoista.
Testikokoelman luominen MongoDB-kyselyille
Nyt luomme kokoelman nimeltä “Asiakkaat”. Jotta kokoelmasta on helppo saada yleiskuva, sisällytämme siihen vain viisi merkintää. Jos käytät MongoDB-kyselyitä työssäsi, voit luoda laajempia kokoelmia insertMany.
Tässä on testikokoelmamme:
db.customers.insertMany ( [
{
"name" : "Schulz",
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
},
{
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2,
}
},
{
"name" : "Meyer",
"units" : 814,
"location" : [ "Austria", "Germany" ],
"transactions" : {
"first" : {
"year" : 2016,
},
"last" : {
"year" : 2023,
},
"total" : 22,
}
},
{
"name" : "Pawolski",
"units" : 313,
"location" : [ "Germany", "Poland" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2020,
},
"total" : 9,
}
},
{
"name" : "Jorgensen",
"units" : 7,
"location" : "Denmark",
"transactions" : {
"first" : {
"year" : 2022,
},
"last" : {
"year" : 2023,
},
"total" : 2,
}
}
] )shellKun suoritat tämän merkinnän käyttämillämme tiedoilla (tai omilla tiedoillasi), saat vastaukseksi luettelon objektien tunnisteista. Nämä tunnisteet ovat yksilöllisiä ja varmistavat, että jokainen asiakirja voidaan löytää myös vastaavan tunnisteen avulla. Jos haluat varmistaa, että kaikki asiakirjat on sisällytetty kokoelmaan, voit käyttää MongoDB-hakua ilman parametreja:
db.customers.find ( )shellTuloksena on luettelo kaikista objektitunnuksista ja täydellisistä asiakirjoista. Voit nyt etsiä niitä MongoDB-kyselyillä.
MongoDB-kyselyjen käyttö kenttien ja taulukoiden kanssa
MongoDB-kyselyillä voi hakea yksittäisiä kenttiä, useita kenttiä, taulukoita ja upotettuja asiakirjoja. Katsotaanpa näitä kaikkia tarkemmin alla olevissa osioissa.
Yksittäisten kenttien kysely MongoDB-kyselyillä
MongoDB find n tuloste osoittaa, kuinka hyödyllisiä MongoDB-kyselyt voivat olla. Pieni otoksemme tuottaa tulosteen, jossa on pitkiä merkkijonoja, joten voit kuvitella, millaista on työskennellä suuremman otoksen kanssa.
Seuraavassa esimerkissä käytämme myös lukua find, mutta tällä kertaa luomme erityisen vaatimuksen, jonka asiakirjan on täytettävä, jotta se voidaan tulostaa. Tarkemmin sanottuna etsimme kaikki asiakirjat, joiden nimessä esiintyy sana “ATS”.
db.customers.find (
{ "name" : "ATS" }
)shellTällaiset yksinkertaiset MongoDB-kyselyt etsivät nyt kaikki kokoelman dokumentit ja löytävät ne, joiden nimi on “ATS”. Tämä koskee vain yhtä kokoelman merkintää, joten tulos näyttää tältä:
db.customers.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}shellToisinpäin toimiminen myös toimii. Jos haluat näyttää kaikki tulokset paitsi merkinnän “ATS”, kirjoita seuraava:
db.customers.find (
{ "name" : { $ne : "ATS" } }
)shellJos haluat tuottaa MongoDB-kyselyitä eri arvoilla, voit tehdä sen taulukon avulla. Teemme tämän käyttämällä asiakkaita ATS ja Jorgensen.
db.customers.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellUseiden kenttien kysely MongoDB-kyselyillä
Jos tarvitset tarkkoja tuloksia, on tärkeää tarkentaa hakua. Voit tarkentaa MongoDB-hakua käyttämällä lisäparametreja. Alla määritämme arvon segmentistä “units” yrityksen nimen “ATS” lisäksi. Tällä tavalla haku etsii dokumentin, joka sisältää molemmat arvot:
db.customers.find (
{ "name" : "ATS", "units" : 17 }
)shellMeillä on tarkka vastaavuus. Jos vain toinen arvoista on vastaava, tulosta ei näytetä. Tässä on esimerkki kyselystä, jossa ei ole tuloksia:
db.customers.find (
{ "name" : "ATS", "units" : 25 }
)shellJos haluat ottaa huomioon erilaisia arvoja MongoDB-kyselyissä, mutta haluat, että kysely tuottaa tuloksen, vaikka vain yksi vaatimuksista täyttyy, kirjoita seuraava:
db.customers.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellArvojen kysely taulukoista
MongoDB-kyselyissä voidaan ottaa huomioon myös taulukoiden arvot. Kokoelmassamme on yrityksiä, joilla on sivuliikkeitä useissa maissa. Jos haluat tulostaa kaikki yritykset, joilla on vähintään yksi sivuliike Saksassa, voit syöttää seuraavan:
db.customers.find (
{ "location" : "Germany" }
)shellTuloksessa on nyt kaikki kolme asiakasta, joilla on vähintään yksi sivuliike Saksassa. Jos haluat laajentaa hakua ja löytää yrityksiä, joilla on sivuliikkeitä Saksassa ja Itävallassa, voit käyttää samaa hakulauseketta ja taulukkoa:
db.customers.find (
{ "location" : [ "Germany", "Austria" ] }
)shellHuomaat, että tuloksena näkyy vain yksi tulos, vaikka teoriassa kaksi yritystä täyttää hakukriteerit. Syynä tähän on se, että MongoDB-kyselyt noudattavat tarkasti annettua syötettä, mukaan lukien elementtien järjestys. Jos haluat, että menetelmä ottaa arvot huomioon niiden järjestyksestä riippumatta, kirjoita kysely seuraavasti:
db.customers.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shellArvojen kysely upotetuissa asiakirjoissa
Kokoelmassamme on myös upotettuja asiakirjoja, jotka voidaan tulostaa myös MongoDB-kyselyillä. Tätä varten sinun on lisättävä piste, joka ilmoittaa MongoDB:lle, että upotetun asiakirjan kenttä on analysoitava. Jos haluat esimerkiksi luettelon kaikista asiakkaista, joilla on yli kymmenen tapahtumaa, kirjoita seuraava:
db.customers.find (
{ "transactions.total" : { $gt : 10 } }
)shellMongoDB hakee “transactions”-asiakirjan ja etsii sitten “total”-kohdasta transaktioiden kokonaismäärän.
MongoDB-kyselyjen tulostuksen rajoittaminen
MongoDB-kyselyjen tulokset voivat olla varsin laajoja, minkä vuoksi voi olla järkevää rajoittaa tuloksia vain muutamaan kenttään. Voit käyttää projektiota rajoittaaksesi tuloksissa näkyvien kenttien määrää. Nämä sisältävät arvon 1 (kentät, jotka tulisi sisällyttää tuloksiin) ja 0 (kentät, joita ei tulisi sisällyttää tuloksiin).
Seuraavassa esimerkissä suoritamme kaksiosaisen kyselyn. Ensin aloitamme haun ilman parametreja käyttämällä find. Yksinään se tulostaisi kaikki kokoelman tiedot. Kuitenkin jatkamme heti sen jälkeen projektioilla, jotka ottavat huomioon vain nimi-kentän.
db.customers.find (
{ }
{ "name" : 1 }
)shellKaikki asiakkaat näytetään, mutta tuloste rajoittuu yritysten nimiin.
Mitä kursorit ovat ja miten voin käyttää niitä MongoDB-kyselyissä?
Kursorit tarjoavat tavan mukauttaa Mongo DB -kyselyn tulosten näyttötapaa muuttamatta kyselyn todellisia tuloksia. Voit esimerkiksi rajoittaa näytettävien tulosten määrää tai muuttaa niiden järjestystä. Jos haluat näyttää vain kaksi tulosta, voit käyttää limit-menetelmää. Näin se tehdään:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 )shellVoit lajitella tuloksen seuraavalla merkinnällä. Tämä näyttää kolme asiakasta, jotka ovat tilanneet vähiten tuotteita:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )shellVoit etsiä tietyn asiakirjan tietokannastasi MongoDB:n findONE-menetelmällä. Selitämme tämän menetelmän tarkemmin toisessa artikkelissa digitaalisessa oppaassamme.