Kaip naudoti MongoDB užklausas
MongoDB užklausos leidžia greitai ir efektyviai ieškoti ir analizuoti duomenų bazę. Metodo struktūra yra logiška, ir jūs galite naudoti daugybę parametrų.
Kaip efektyviai ieškoti kolekcijose
Kaip dokumentais pagrįstas NoSQL sprendimas, MongoDB suteikia vartotojams galimybę lengvai saugoti ir valdyti didelius ir įvairius duomenų kiekius. Duomenų bazių valdymo sistema yra labai lanksti ir ją galima lengvai išplėsti horizontaliai.
Skirtingai nei reliacinėse duomenų bazėse, Mongo DB duomenys saugomi BSON dokumentuose (binariniame JSON) ir sugrupuoti į kolekcijas. Kad šis metodas tikrai veiktų, svarbuturėti galingus užklausų mechanizmus, kurie gali išrinkti duomenų bazę ir pateikti vartotojams reikalingą informaciją. Naudojant MongoDB užklausas, duomenų bazė gali ieškoti net sudėtingos struktūros kolekcijose, kad pateiktų jums reikalingą informaciją.
Ar MongoDB apvalkalo naudojimas yra pernelyg sudėtingas? MongoDB Compass yra nemokama grafinė vartotojo sąsaja, kuri palengvina navigaciją MongoDB.
Kas yra MongoDB užklausos?
MongoDB užklausos yra patogi priemonė, skirta sudėtingų duomenų struktūrų paieškai. Jos atitinka logines taisykles ir veikia kaip filtravimo parinktys, kurias galima rasti daugelyje tinklalapių. Tai leidžia kuo tiksliau suformuluoti paiešką, kad būtų galima pasiekti geriausius galimus rezultatus. Tai ypač svarbu, nes MongoDB gali saugoti daug įvairių tipų duomenų. Be reikiamų filtravimo parinkčių būtų sunku valdyti duomenų bazę. Toliau paaiškinsime, ko reikia norint sukurti MongoDB užklausas ir kaip jas naudoti.
Kokie yra MongoDB užklausų reikalavimai?
Yra tik keletas reikalavimų, norint naudoti MongoDB užklausas.
- Jūsų kompiuteryje turi būti įdiegta MongoDB. Duomenų bazė veikia daugelyje operacinių sistemų, todėl toliau pateiktos instrukcijos tinka tiek Linux, tiek OS X, tiek Windows operacinėms sistemoms. Po įdiegimo veiksmai yra vienodi visose sistemose ir susiję tik su pačia duomenų baze. Kaip įdiegti programą, galite sužinoti mūsų MongoDB pamokoje.
- Norėdami naudotis paieškos funkcija, turite turėti administratoriaus teises.
- Geriausia sukurti bandomąją aplinką, kad galėtumėte išbandyti Mongo DB užklausas be rizikos.
Kaip struktūrizuoti testų rinkinį
Pirmiausia atidarykite apvalkalą ir prisijunkite kaip administratorius. Tada sukurkite naują kolekciją, kuri bus jūsų pirmųjų MongoDB užklausų bandymo aplinka. Be paprastų dokumentų paieškos, šis metodas taip pat gali ieškoti masyvų, įvairių laukų ir įterptųjų dokumentų, todėl nusprendėme sukurti šiek tiek sudėtingesnę kolekciją. Taip geriau suprasite MongoDB užklausų apimtį.
Mūsų pavyzdys susideda iš klientų sąrašo. Šio sąrašo formatas yra toks:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}shellŠiame dokumente pateikiama ši informacija:
- pavadinimas: prekes įsigijusios įmonės pavadinimas.
- vienetai: bendras įmonės užsakytų produktų skaičius.
- vietovė: įmonės vietovė. Jei yra keletas filialų, jie gali būti išsaugoti masyvo forma.
- sandoriai: Šiame laukelyje yra papildomas dokumentas. Tokie dokumentai vadinami „įterptais dokumentais“ arba „įterptais dokumentais“. Kiekviename sandorio dokumente yra informacija apie tai, kiek laiko įmonė yra klientas (pagal „pirmasis“ punktas), kada buvo pateiktas paskutinis užsakymas (pagal „paskutinis“ punktas) ir bendras kartų skaičius, kurį įmonė užsakė produktus (pagal „bendras“ punktas).
Šiame pavyzdyje pridėjome papildomus dokumentus, kad vėliau būtų lengviau įtraukti informaciją. Tai padeda užtikrinti gerą duomenų bazės informacijos apžvalgą.
MongoDB užklausų testų rinkinio kūrimas
Dabar sukursime kolekciją pavadinimu „Klientai“. Kad būtų lengviau peržiūrėti kolekciją, įtrauksime tik penkis įrašus. Jei darbe naudojate MongoDB užklausas, galite sukurti išsamesnes kolekcijas naudodami insertMany metodą.
Štai kaip atrodo mūsų bandymų rinkinys:
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,
}
}
] )shellKai paleisite šį įrašą su mūsų naudotais duomenimis (arba su savo duomenimis), gausite objektų ID sąrašą. Šie ID yra unikalūs ir užtikrina, kad kiekvieną dokumentą taip pat galima rasti pagal atitinkamą ID. Jei norite įsitikinti, kad visi dokumentai buvo įtraukti į kolekciją, galite naudoti MongoDB find be parametrų:
db.customers.find ( )shellRezultatas yra visų objektų ID sąrašas su išsamiais dokumentais. Dabar juos galite ieškoti naudodami MongoDB užklausas.
Kaip naudoti MongoDB užklausas su laukais ir masyvais
MongoDB užklausas galite naudoti atskiriems laukams, keliems laukams, masyvams ir įterptiesiems dokumentams ieškoti. Toliau pateiktuose skyriuose apžvelgsime kiekvieną iš jų.
Atskirų laukų užklausa naudojant MongoDB užklausas
MongoDB find išvestis rodo, kaip naudingos gali būti MongoDB užklausos. Mūsų nedidelis pavyzdys sukuria išvestį su ilgomis simbolių eilutėmis, todėl galite įsivaizduoti, kaip atrodytų didesnis pavyzdys.
Šiame pavyzdyje taip pat naudosime find, tačiau šį kartą nustatysime specialų reikalavimą, kurį dokumentas turi atitikti, kad būtų išvestas. Konkrečiai, ieškosime visų dokumentų, kurių pavadinime yra žodis „ATS“.
db.customers.find (
{ "name" : "ATS" }
)shellTokios paprastos MongoDB užklausos dabar ieškos visų dokumentų kolekcijoje ir atitiks tuos, kurių pavadinimo vertė yra „ATS“. Tai taikoma tik vienam įrašui mūsų kolekcijoje, todėl rezultatas atrodo taip:
db.customers.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}shellAtvirkštinis būdas taip pat veikia. Jei norite rodyti visus rezultatus, išskyrus įrašą „ATS“, įveskite šią komandą:
db.customers.find (
{ "name" : { $ne : "ATS" } }
)shellJei norite išvesti MongoDB užklausas su skirtingomis reikšmėmis, galite tai padaryti naudodami masyvą. Tai padarysime naudodami klientus ATS ir Jorgensen.
db.customers.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellKelių laukų užklausa naudojant MongoDB užklausas
Jei jums reikia tikslių rezultatų, svarbu, kad jūsų užklausa būtų kuo konkretesnė. MongoDB užklausas galite padaryti tikslesnes naudodami papildomus parametrus. Toliau nurodysime vertę iš segmento „units“ be įmonės pavadinimo „ATS“. Tokiu būdu mūsų užklausa ieškos dokumento, kuriame yra abi vertės:
db.customers.find (
{ "name" : "ATS", "units" : 17 }
)shellTurime tikslią atitiktį. Jei tik viena iš dviejų verčių yra atitinkama, rezultatas nebus rodomas. Štai pavyzdys užklausos be rezultatų:
db.customers.find (
{ "name" : "ATS", "units" : 25 }
)shellJei norite atsižvelgti į skirtingas reikšmes naudodami MongoDB užklausas, bet norite, kad užklausa pateiktų rezultatą net ir tada, kai tenkinamas tik vienas iš reikalavimų, įveskite šią komandą:
db.customers.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellVerčių paieška masyvuose
MongoDB užklausose taip pat galite atsižvelgti į masyvų vertes. Mūsų kolekcijoje yra įmonių, kurios turi filialus keliose šalyse. Jei norite išvesti visas įmones, kurios turi bent vieną filialą Vokietijoje, galite įvesti šią informaciją:
db.customers.find (
{ "location" : "Germany" }
)shellDabar rezultatuose yra visi trys klientai, turintys bent vieną filialą Vokietijoje. Jei norite išplėsti įvestį ir rasti įmones, turinčias filialus Vokietijoje ir Austrijoje, naudodami tą patį užklausą, galite naudoti masyvą:
db.customers.find (
{ "location" : [ "Germany", "Austria" ] }
)shellPastebėsite, kad įvesties laukelyje rodomas tik vienas rezultatas, nors teoriškai paieškos kriterijus atitinka dvi įmonės. Taip yra todėl, kad MongoDB užklausos tiksliai atitinka įvesties laukelyje nurodytą informaciją, įskaitant elementų tvarką. Jei norite, kad metodas atsižvelgtų į vertes nepriklausomai nuo jų tvarkos, užklausą rašykite taip:
db.customers.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shellVertės užklausos įterptuose dokumentuose
Mūsų kolekcijoje taip pat yra įterpti dokumentai, kuriuos taip pat galima išvesti naudojant MongoDB užklausas. Norėdami tai padaryti, turite pridėti tašką, kad MongoDB žinotų, jog reikia analizuoti įterpto dokumento lauką. Pavyzdžiui, jei norite gauti visų klientų, kurie atliko daugiau nei dešimt sandorių, sąrašą, įveskite šią komandą:
db.customers.find (
{ "transactions.total" : { $gt : 10 } }
)shellMongoDB pasiekia dokumentą „transactions“ ir tada ieško bendro sandorių skaičiaus skiltyje „total“.
Kaip apriboti MongoDB užklausų išvestį
MongoDB užklausų išvestis gali būti gana didelė, todėl gali būti tikslinga apriboti išvestį iki kelių laukų. Naudodami projekcijas galite apriboti išvestyje rodomų laukų skaičių. Jos turi reikšmę 1 (laukeliai, kurie turėtų būti įtraukti į išvestį) ir 0 (laukeliai, kurie neturėtų būti įtraukti į išvestį).
Šiame pavyzdyje atliksime dviejų dalių užklausą. Pirmiausia, naudodami find metodą, inicijuosime paiešką be parametrų. Ji pati išvestų visus kolekcijos duomenis. Tačiau iš karto po to atliksime projekciją, kurioje bus atsižvelgiama tik į lauko „name“ reikšmę.
db.customers.find (
{ }
{ "name" : 1 }
)shellBus rodomi visi klientai, tačiau išvestis bus apribota tik įmonių pavadinimais.
Kas yra žymekliai ir kaip juos naudoti MongoDB užklausose?
Kursoriai leidžia pritaikyti Mongo DB užklausos rezultatų rodymą, nekeičiant pačių užklausos rezultatų. Pavyzdžiui, galite apriboti rodomų rezultatų skaičių arba pakeisti jų tvarką. Jei norite rodyti tik du rezultatus, galite naudoti ribojimo metodą. Tai daroma taip:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 )shellNorėdami surūšiuoti rezultatus, galite naudoti šį įrašą. Tai parodys tris klientus, kurie užsisakė mažiausiai produktų:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )shellNorėdami rasti konkretų dokumentą savo duomenų bazėje, galite naudoti MongoDB findONE metodą. Šį metodą išsamiau paaiškiname kitame mūsų skaitmeninio vadovo straipsnyje.
9378b1ddb0084eac26edf8b51e922ecb
b713997fc6bfc4f1f8d7a9ec6d65df69
c9ac60f2f370c12c4028af59a2fea6ae
7dd4860127d59f767354576150e2acbd
03b2f431bad31c7bebd9b9a784e591ba
641becce284983e6cc3064159285947f