Kuidas kasutada MongoDB päringuid
MongoDB päringud võimaldavad teil oma andmebaasi kiiresti ja tõhusalt otsida ja analüüsida. Meetodi struktuur on loogiline ja sellega saab kasutada mitmeid parameetreid.
Kuidas otsida kogusid tõhusalt
Dokumentidel põhineva NoSQL-lahendusena annab MongoDB kasutajatele võimaluse hõlpsasti salvestada ja hallata suuri ja mitmekesiseid andmehulki. Andmebaasi haldussüsteem on väga paindlik ja seda saab hõlpsasti horisontaalselt skaleerida.
Erinevalt relatsioonilistest andmebaasidest salvestatakse Mongo DB andmed BSON-dokumentidesse (binaarne JSON) ja koondatakse kogudesse. Selle lähenemise tõhusaks toimimiseks on oluline, etoleks olemas tugevad päringumehhanismid, mis suudavad andmebaasi läbi sõeluda ja esitada kasutajatele vajalikku teavet. MongoDB päringute abil saab andmebaas otsida isegi keeruka struktuuriga kogudest, et leida teile vajalik teave.
Kas MongoDB-i shelli kasutamine on liiga keeruline? MongoDB Compass on tasuta graafiline kasutajaliides, mis muudab MongoDB-is navigeerimise lihtsaks.
Mis on MongoDB päringud?
MongoDB päringud on kasutajasõbralikud tööriistad, mida kasutatakse keeruliste andmestruktuuride otsimiseks. Need järgivad loogilisi reegleid ja toimivad sarnaselt enamiku veebisaitide filtreerimisvõimalustega. See võimaldab teil oma otsingut võimalikult täpselt formuleerida, et saavutada parimaid tulemusi. See on eriti oluline, kuna MongoDB suudab salvestada palju erinevat tüüpi andmeid. Ilma vajalike filtreerimisvõimalusteta oleks andmebaasi haldamine keeruline. Järgmistes jaotistes selgitame, mida on vaja MongoDB päringute loomiseks ja kuidas neid kasutada.
Millised on MongoDB päringute nõuded?
MongoDB päringute kasutamiseks on vaid mõned nõuded.
- Teie arvutisse peab olema installitud MongoDB. Andmebaas töötab paljudes operatsioonisüsteemides, seega allpool esitatud juhised kehtivad nii Linuxi, OS X kui ka Windowsi kasutajate jaoks. Pärast installimist järgnevad sammud on kõikides süsteemides ühesugused ja mõjutavad ainult andmebaasi ennast. Installimise kohta leiate teavet meie MongoDB-õpetusest.
- Otsingufunktsiooni kasutamiseks on vaja administraatori õigusi.
- Parim on luua testkeskkond, et saaksite Mongo DB päringuid riskivabalt proovida.
Kuidas struktureerida testikogu
Esmalt avage shell ja logige sisse administraatorina. Seejärel looge uus kogum, mis toimib teie esimeste MongoDB päringute testkeskkonnana. Lisaks lihtsate dokumentide otsimisele võimaldab meetod otsida ka massiive, erinevaid välju ja sisseehitatud dokumente, mistõttu oleme otsustanud luua veidi keerulisema kogumi. Nii saate parema ülevaate MongoDB päringute ulatusest.
Meie näide koosneb klientide nimekirjast. Nimekirja formaat on järgmine:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}shellKäesolev dokument sisaldab järgmist teavet:
- nimi: Kauba ostnud ettevõtte nimi.
- ühikud: Ettevõtte tellitud toodete koguarv.
- asukoht: ettevõtte asukoht. Kui ettevõttel on mitu filiaali, võib need salvestada massiivi kujul.
- tehingud: See väli sisaldab lisadokumenti. Selliseid dokumente nimetatakse „sisestatud dokumentideks” või „pesastatud dokumentideks”. Iga tehingudokument sisaldab teavet selle kohta, kui kaua ettevõte on olnud klient („esimene” punkt), millal tehti viimane tellimus („viimane” punkt) ja kui palju kordi ettevõte on tooteid tellinud („koguarv” punkt).
Selle näite puhul oleme lisanud täiendavaid dokumente, et hiljem oleks lihtsam lisada teavet. See aitab tagada hea ülevaate andmebaasis olevast teabest.
MongoDB päringute testkogumiku loomine
Nüüd loome kogumiku nimega „Kliendid”. Et kogumikust oleks lihtne ülevaadet saada, lisame sinna ainult viis kirjet. Kui kasutate töös MongoDB päringuid, saate insertMany meetodit kasutades luua ulatuslikumaid kogumikke.
Siin on meie testkogu:
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,
}
}
] )shellKui käivitad selle kande meie kasutatud andmetega (või oma andmetega), saad vastuseks objektide ID-de loendi. Need on unikaalsed ja tagavad, et iga dokumenti on võimalik leida ka vastava ID kaudu. Kui soovid veenduda, et kõik dokumendid on kogumisse lisatud, võid kasutada MongoDB find ilma parameetriteta:
db.customers.find ( )shellVäljundiks on loetelu kõikidest objektide ID-dest koos täielike dokumentidega. Nüüd saate neid otsida MongoDB päringute abil.
Kuidas kasutada MongoDB päringuid väljade ja massiividega
MongoDB päringuid saab kasutada üksikute väljade, mitme välja, massiivide ja sisseehitatud dokumentide otsimiseks. Allpool vaatame neid ükshaaval lähemalt.
MongoDB päringutega üksikute väljade päringud
MongoDB find väljund näitab, kui kasulikud võivad olla MongoDB päringud. Meie väike valim annab väljundiks pikki märgijadasid, seega võite ette kujutada, milline on olukord suurema valimiga töötades.
Järgmises näites kasutame samuti find, kuid seekord loome spetsiaalse nõude, millele dokument peab vastama, et see väljastataks. Täpsemalt otsime kõiki dokumente, mille nimi on „ATS”.
db.customers.find (
{ "name" : "ATS" }
)shellSellised lihtsad MongoDB päringud otsivad nüüd kõik kogumiku dokumendid ja leiavad need, mille nimi on „ATS”. See kehtib ainult ühe kogumiku kande kohta, seega on tulemus järgmine:
db.customers.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}shellKa vastupidine toimib. Kui soovite kuvada kõik tulemused peale „ATS” kirje, sisestage järgmine:
db.customers.find (
{ "name" : { $ne : "ATS" } }
)shellKui soovite väljastada MongoDB päringuid erinevate väärtustega, saate seda teha massiivi abil. Teeme seda klientide ATS ja Jorgensen abil.
db.customers.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellMitme välja päringud MongoDB päringutega
Kui vajate täpseid tulemusi, on oluline muuta päring täpsemaks. MongoDB päringuid saab täpsemaks muuta, kasutades lisaparametreid. Allpool määrame lisaks ettevõtte nimele „ATS” ka väärtuse segmentist „units”. Sel viisil otsib meie päring dokumenti, mis sisaldab mõlemat väärtust:
db.customers.find (
{ "name" : "ATS", "units" : 17 }
)shellMeil on täpne vaste. Kui ainult üks kahest väärtusest on vaste, ei kuvata tulemust. Siin on näide päringust, millel ei ole tulemusi:
db.customers.find (
{ "name" : "ATS", "units" : 25 }
)shellKui soovite MongoDB päringute kasutamisel arvesse võtta erinevaid väärtusi, kuid soovite, et päring annaks tulemuse isegi siis, kui ainult üks nõuetest on täidetud, sisestage järgmine:
db.customers.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellMassiivide väärtuste päringud
MongoDB päringutes saab arvesse võtta ka massiivides olevaid väärtusi. Meie kogus on ettevõtteid, millel on filiaalid mitmes riigis. Kui soovite kuvada kõik ettevõtted, millel on vähemalt üks filiaal Saksamaal, võite sisestada järgmise päringu:
db.customers.find (
{ "location" : "Germany" }
)shellVäljund sisaldab nüüd kõiki kolme klienti, kellel on vähemalt üks filiaal Saksamaal. Kui soovite oma sisendit laiendada ja leida sama päringu abil ettevõtteid, millel on filiaalid Saksamaal ja Austrias, võite kasutada massiivi:
db.customers.find (
{ "location" : [ "Germany", "Austria" ] }
)shellTe märkate, et sisend näitab ainult ühte tulemust, kuigi teoreetiliselt vastavad otsingukriteeriumidele kaks ettevõtet. Selle põhjuseks on asjaolu, et MongoDB päringud järgivad täpselt antud sisendit, sealhulgas elementide järjekorda. Kui soovite, et meetod arvestaks väärtusi sõltumata nende järjekorrast, kirjutage päring järgmiselt:
db.customers.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shellSisestatud dokumentide väärtuste päringud
Meie kogus on ka sisseehitatud dokumendid, mida saab samuti MongoDB päringute abil väljastada. Selleks tuleb lisada punkt, et märkida MongoDB-le, et pesastatud dokumendi väli tuleb analüüsida. Näiteks, kui soovite nimekirja kõikidest klientidest, kellel on rohkem kui kümme tehingut, sisestage järgmine:
db.customers.find (
{ "transactions.total" : { $gt : 10 } }
)shellMongoDB avab dokumendi „transactions” ja otsib seejärel koguarvu „total” alt.
Kuidas piirata MongoDB päringute väljundit
MongoDB päringute väljund võib olla üsna ulatuslik, mistõttu võib olla mõistlik piirata väljundit vaid mõne väljaga. Väljundis kuvatavate väljade arvu saab piirata projektsioonide abil. Need sisaldavad väärtust 1 (väljad, mis peaksid olema väljundis) ja 0 (väljad, mis ei peaks olema väljundis).
Järgmises näites teostame kaheosalise päringu. Esmalt algatame parameetriteta otsingu, kasutades meetodit find. See väljastaks iseenesest kogu kogumiku andmed. Siiski järgneb sellele kohe projektsioon, mis võtab arvesse ainult nimevälja.
db.customers.find (
{ }
{ "name" : 1 }
)shellKõik kliendid kuvatakse, kuid väljund piirdub ettevõtete nimedega.
Mis on kursorid ja kuidas neid MongoDB päringutes kasutada?
Kursorid võimaldavad kohandada Mongo DB päringu tulemuste kuvamist, muutmata päringu tegelikke tulemusi. Näiteks saate piirata kuvatavate tulemuste arvu või muuta nende järjekorda. Kui soovite kuvada ainult kahte tulemust, saate kasutada piirangumeetodit. Siin on juhised:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 )shellVäljundi sorteerimiseks võite kasutada järgmist koodi. See kuvab kolm klienti, kes on tellinud kõige vähem tooteid:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )shell9378b1ddb0084eac26edf8b51e922ecb
b713997fc6bfc4f1f8d7a9ec6d65df69
c9ac60f2f370c12c4028af59a2fea6ae
7dd4860127d59f767354576150e2acbd
03b2f431bad31c7bebd9b9a784e591ba
641becce284983e6cc3064159285947f