Kā lietot MongoDB vaicājumus
MongoDB vaicājumi ļauj ātri un efektīvi meklēt un analizēt datu bāzi. Metodes struktūra ir loģiska, un to var izmantot kopā ar daudziem parametriem.
Kā efektīvi meklēt kolekcijas
Kā dokumentu balstīts NoSQL risinājums, MongoDB lietotājiem piedāvā iespēju viegli uzglabāt un pārvaldīt lielus un daudzveidīgus datu apjomus. Datubāzes pārvaldības sistēma ir ļoti elastīga un to var viegli horizontāli mērogot.
Atšķirībā no relatīvajām datu bāzēm, dati Mongo DB tiek glabāti BSON dokumentos (binārais JSON) un apkopoti kolekcijās. Lai šī pieeja patiešām darbotos, ir svarīgi, laibūtu spēcīgi vaicājumu mehānismi, kas var pārbaudīt datu bāzi un sniegt lietotājiem nepieciešamo informāciju. Ar MongoDB vaicājumiem datu bāze var meklēt pat sarežģīti strukturētas kolekcijas, lai sniegtu jums nepieciešamo informāciju.
Vai MongoDB apvalka izmantošana ir pārāk sarežģīta? MongoDB Compass ir bezmaksas grafiska lietotāja saskarne, kas atvieglo navigāciju MongoDB.
Kas ir MongoDB vaicājumi?
MongoDB vaicājumi ir lietotājam draudzīgs rīks, ko izmanto sarežģītu datu struktūru meklēšanai. Tie atbilst loģiskiem noteikumiem un darbojas kā filtrēšanas opcijas, kas atrodamas lielākajā daļā tīmekļa vietņu. Tas ļauj formulēt meklējumu pēc iespējas precīzāk, lai sasniegtu vislabākos iespējamos rezultātus. Tas ir īpaši svarīgi, jo MongoDB spēj uzglabāt daudzus dažādus datu veidus. Bez nepieciešamajām filtrēšanas opcijām datu bāzes pārvaldība būtu sarežģīta. Turpmākajās sadaļās mēs izskaidrosim, kas nepieciešams, lai izveidotu MongoDB vaicājumus, un kā tos lietot.
Kādas ir prasības MongoDB vaicājumiem?
MongoDB vaicājumu izmantošanai ir tikai daži nosacījumi.
- Jūsu datorā ir jābūt instalētai MongoDB. Datubāze darbojas daudzās operētājsistēmās, tādēļ zemāk minētās instrukcijas darbojas neatkarīgi no tā, vai izmantojat Linux, OS X vai Windows. Pēc instalēšanas veicamie soļi ir vienādi visās sistēmās un attiecas tikai uz pašu datubāzi. Par instalēšanas procesu varat uzzināt mūsu MongoDB apmācībā.
- Lai izmantotu meklēšanas funkciju, jums ir nepieciešamas administratora tiesības.
- Vislabāk ir izveidot testa vidi, lai varētu izmēģināt Mongo DB vaicājumus bez riska.
Kā strukturēt testa kolekciju
Vispirms atveriet apvalku un piesakieties kā administrators. Tad izveidojiet jaunu kolekciju, kas kalpos kā testa vide jūsu pirmajiem MongoDB vaicājumiem. Papildus vienkāršu dokumentu meklēšanai, metode var meklēt arī masīvus, dažādus laukus un iegultos dokumentus, tāpēc esam nolēmuši izveidot nedaudz sarežģītāku kolekciju. Tādējādi jūs labāk izpratīsiet MongoDB vaicājumu apjomu.
Mūsu piemērs sastāv no klientu saraksta. Šī saraksta formāts ir šāds:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}shellŠis dokuments satur šādu informāciju:
- nosaukums: Preces iegādājusies uzņēmuma nosaukums.
- vienības: Kopējais uzņēmuma pasūtīto produktu skaits.
- atrašanās vieta: Uzņēmuma atrašanās vieta. Ja ir vairākas filiāles, tās var saglabāt masīva veidā.
- transakcijas: Šajā laukā ir iekļauts papildu dokuments. Šādus dokumentus sauc par „ievietotiem dokumentiem” vai „iegultiem dokumentiem”. Katrs no transakciju dokumentiem satur informāciju par to, cik ilgi uzņēmums ir bijis klients (sadaļā „pirmais”), kad tika veikts pēdējais pasūtījums (sadaļā „pēdējais”) un kopējo reizes, kad uzņēmums ir pasūtījis produktus (sadaļā „kopā”).
Šajā piemērā mēs esam pievienojuši papildu dokumentus, lai vēlāk būtu vieglāk iekļaut informāciju. Tas palīdz nodrošināt labu pārskatu par informāciju datu bāzē.
Testa kolekcijas izveide MongoDB vaicājumiem
Tagad mēs izveidosim kolekciju ar nosaukumu „Klienti”. Lai būtu vieglāk pārskatīt kolekciju, mēs iekļausim tikai piecus ierakstus. Ja darbā izmantojat MongoDB vaicājumus, varat izveidot plašākas kolekcijas, izmantojot insertMany metodi.
Šeit ir redzams, kā izskatās mūsu testa kolekcija:
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,
}
}
] )shellKad izpildīsiet šo ierakstu ar mūsu izmantotajiem datiem (vai saviem datiem), saņemsiet objektu ID sarakstu. Tie ir unikāli un nodrošina, ka katru dokumentu var atrast arī pēc atbilstošā ID. Ja vēlaties pārliecināties, ka visi dokumenti ir iekļauti kolekcijā, varat izmantot MongoDB find bez parametriem:
db.customers.find ( )shellRezultāts ir visu objektu ID saraksts ar pilnīgiem dokumentiem. Tagad tos varat meklēt, izmantojot MongoDB vaicājumus.
Kā lietot MongoDB vaicājumus ar laukiem un masīviem
Jūs varat izmantot MongoDB vaicājumus, lai meklētu atsevišķus laukus, vairākus laukus, masīvus un iegultos dokumentus. Katru no tiem apskatīsim turpmākajās sadaļās.
Atsevišķu lauku vaicāšana ar MongoDB vaicājumiem
MongoDB find izvade parāda, cik noderīgi var būt MongoDB vaicājumi. Mūsu nelielais paraugs rada izvadi ar garām rakstzīmju virknēm, tādēļ varat iedomāties, kā tas izskatās, ja strādājat ar lielāku paraugu.
Turpmākajā piemērā mēs arī izmantosim find, bet šoreiz mēs izveidosim īpašu prasību, kurai dokumentam ir jāatbilst, lai to varētu izvadīt. Konkrēti, mēs meklēsim visus dokumentus, kuru nosaukumā ir vārds „ATS”.
db.customers.find (
{ "name" : "ATS" }
)shellVienkārši MongoDB vaicājumi, piemēram, šis, tagad meklēs visus dokumentus kolekcijā un atradīs tos, kuru nosaukuma vērtība ir “ATS”. Tas attiecas tikai uz vienu ierakstu mūsu kolekcijā, tāpēc rezultāts izskatās šādi:
db.customers.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}shellTo var darīt arī otrādi. Ja vēlaties parādīt visus rezultātus, izņemot ierakstu „ATS”, ievadiet šādu komandu:
db.customers.find (
{ "name" : { $ne : "ATS" } }
)shellJa vēlaties izvadīt MongoDB vaicājumus ar dažādām vērtībām, to var izdarīt, izmantojot masīvu. To izdarīsim, izmantojot klientus ATS un Jorgensen.
db.customers.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellVairāku lauku vaicāšana ar MongoDB vaicājumiem
Ja jums ir nepieciešami precīzi rezultāti, ir svarīgi padarīt savu vaicājumu konkrētāku. Jūs varat padarīt savus MongoDB vaicājumus precīzākus, izmantojot papildu parametrus. Zemāk mēs norādīsim vērtību no segmenta „units” papildus uzņēmuma nosaukumam „ATS”. Tādējādi mūsu vaicājums meklēs dokumentu, kas satur abas vērtības:
db.customers.find (
{ "name" : "ATS", "units" : 17 }
)shellMums ir precīza atbilde. Ja tikai viena no divām vērtībām atbilst, rezultāts netiks parādīts. Šeit ir piemērs ar vaicājumu, kam nav rezultātu:
db.customers.find (
{ "name" : "ATS", "units" : 25 }
)shellJa vēlaties ņemt vērā dažādas vērtības, izmantojot MongoDB vaicājumus, bet vēlaties, lai vaicājums izvadītu rezultātu pat tad, ja ir izpildīta tikai viena no prasībām, ievadiet šo:
db.customers.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellVērtību pieprasīšana masīvos
Ar MongoDB vaicājumiem var ņemt vērā arī masīvu vērtības. Mūsu kolekcijā ir uzņēmumi, kuriem ir filiāles vairākās valstīs. Ja vēlaties izvadīt visus uzņēmumus, kuriem ir vismaz viena filiāle Vācijā, varat ievadīt šādu vaicājumu:
db.customers.find (
{ "location" : "Germany" }
)shellRezultātā tagad ir iekļauti visi trīs klienti, kuriem ir vismaz viena filiāle Vācijā. Ja vēlaties paplašināt savu ievadi un atrast uzņēmumus, kuriem ir filiāles Vācijā un Austrijā, izmantojot to pašu vaicājumu, varat izmantot masīvu:
db.customers.find (
{ "location" : [ "Germany", "Austria" ] }
)shellJūs ievērosiet, ka ievade parāda tikai vienu rezultātu, kaut arī teorētiski divas kompānijas atbilst meklēšanas kritērijiem. Iemesls tam ir tas, ka MongoDB vaicājumi precīzi atbilst ievadītajam, ieskaitot elementu secību. Ja vēlaties, lai metode ņemtu vērā vērtības neatkarīgi no to parādīšanās secības, rakstiet vaicājumu šādi:
db.customers.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shellVērtību pieprasīšana iegultos dokumentos
Mūsu kolekcijā ir arī iegultie dokumenti, kurus var izvadīt, izmantojot MongoDB vaicājumus. Lai to izdarītu, jums ir jāpievieno punkts, lai norādītu MongoDB, ka ir jāanalizē iegultā dokumenta lauks. Piemēram, ja vēlaties sarakstu ar visiem klientiem, kuriem ir vairāk nekā desmit darījumu, ievadiet šādu komandu:
db.customers.find (
{ "transactions.total" : { $gt : 10 } }
)shellMongoDB piekļūst dokumentam „transactions” un pēc tam meklē kopējo darījumu skaitu sadaļā „total”.
Kā ierobežot MongoDB vaicājumu izvadi
MongoDB vaicājumu rezultāti var būt diezgan apjomīgi, tāpēc var būt lietderīgi ierobežot rezultātus tikai dažiem laukiem. Lai ierobežotu rezultātos parādāmo lauku skaitu, var izmantot projekcijas. Tās satur vērtību 1 (lauki, kas jāiekļauj rezultātos) un 0 (lauki, kas nav jāiekļauj rezultātos).
Šajā piemērā mēs veiksime divdaļīgu vaicājumu. Pirmkārt, mēs uzsāksim meklēšanu bez parametriem, izmantojot metodi find. Pati par sevi tā izvadīs visus datus kolekcijā. Tomēr mēs uzreiz pēc tam izmantosim projekciju, kas ņem vērā tikai lauku name.
db.customers.find (
{ }
{ "name" : 1 }
)shellTiks parādīti visi klienti, bet izvade tiks ierobežota ar uzņēmumu nosaukumiem.
Kas ir kursori un kā tos var izmantot MongoDB vaicājumos?
Kursori piedāvā iespēju pielāgot Mongo DB vaicājumu rezultātu attēlošanu, nemainot pašu vaicājumu rezultātus. Piemēram, varat ierobežot attēloto rezultātu skaitu vai mainīt to secību. Ja vēlaties attēlot tikai divus rezultātus, varat izmantot ierobežošanas metodi. To var izdarīt šādi:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 )shellLai šķirotu rezultātus, varat izmantot šādu ierakstu. Tādējādi tiks parādīti trīs klienti, kuri ir pasūtījuši vismazāk produktu:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )shellLai atrastu konkrētu dokumentu savā datu bāzē, varat izmantot MongoDB findONE metodi. Šo metodi sīkāk izskaidrojam citā rakstā mūsu digitālajā ceļvedī.
9378b1ddb0084eac26edf8b51e922ecb
b713997fc6bfc4f1f8d7a9ec6d65df69
c9ac60f2f370c12c4028af59a2fea6ae
7dd4860127d59f767354576150e2acbd
03b2f431bad31c7bebd9b9a784e591ba
641becce284983e6cc3064159285947f
af5bd231f8dfa4f75eecbb9d98b6d7d7