Kako uporabljati poizvedbe MongoDB
Z MongoDB poizvedbami lahko hitro in učinkovito iščete in analizirate svojo bazo podatkov. Struktura metode je logična, pri čemer lahko uporabite številne parametre.
Kako učinkovito iskati zbirke
Kot dokumentna rešitev NoSQL, MongoDB uporabnikom omogoča enostavno shranjevanje in upravljanje velikih in raznolikih količin podatkov. Sistem za upravljanje podatkovnih baz je zelo prilagodljiv in se lahko enostavno horizontalno širi.
Za razliko od relacijskih baz podatkov so podatki v Mongo DB shranjeni v dokumentih BSON (binarni JSON) in združeni v zbirkah. Da bi ta pristop resnično deloval, je pomembnoimeti močne mehanizme za poizvedovanje, ki lahko prečesajo bazo podatkov in prikažejo informacije, ki jih uporabniki potrebujejo. S poizvedbami MongoDB lahko baza podatkov išče celo v kompleksno strukturiranih zbirkah, da prikaže informacije, ki jih iščete.
Je uporaba lupine za MongoDB preveč zapletena? MongoDB Compass je brezplačen grafični uporabniški vmesnik, ki olajša navigacijo po MongoDB.
Kaj so poizvedbe MongoDB?
Poizvedbe MongoDB so uporabniku prijazno orodje za iskanje kompleksnih podatkovnih struktur. Sledijo logičnim pravilom in delujejo podobno kot možnosti filtriranja, ki jih najdete na večini spletnih strani. To vam omogoča, da svoje iskanje oblikujete čim natančneje, da dosežete najboljše možne rezultate. To je še posebej pomembno, saj MongoDB lahko shranjuje veliko različnih vrst podatkov. Brez potrebnih možnosti filtriranja bi bilo upravljanje zbirke podatkov težko. V naslednjih poglavjih bomo pojasnili, kaj potrebujete za ustvarjanje poizvedb MongoDB in kako jih uporabljati.
Kakšne so zahteve za poizvedbe v MongoDB?
Za uporabo poizvedb MongoDB je potrebnih le nekaj pogojev.
- Na računalniku morate imeti nameščen MongoDB. Baza podatkov deluje na številnih operacijskih sistemih, zato spodnja navodila veljajo ne glede na to, ali uporabljate Linux, OS X ali Windows. Koraki, ki sledijo namestitvi, so enaki na vseh sistemih in vplivajo samo na samo bazo podatkov. Kako poteka namestitev, lahko izveste v našem MongoDB tutorialu.
- Za uporabo funkcije iskanja potrebujete administratorske pravice.
- Najbolje je ustvariti testno okolje, da lahko brez tveganja preizkusite poizvedbe Mongo DB.
Kako strukturirati zbirko testov
Najprej odprite lupino in se prijavite kot skrbnik. Nato ustvarite novo zbirko, ki bo služila kot testno okolje za vaše prve poizvedbe MongoDB. Poleg iskanja preprostih dokumentov lahko ta metoda išče tudi nize, različna polja in vgrajene dokumente, zato smo se odločili ustvariti nekoliko bolj zapleteno zbirko. Na ta način boste dobili boljšo predstavo o obsegu poizvedb MongoDB.
Naš primer obsega seznam strank. Oblika tega seznama je naslednja:
{
"name" : "Schulz",
"units" : 642,
"location" : [ "Germany", "Austria" ],
"transactions" : {
"first" : {
"year" : 2017,
},
"last" : {
"year" : 2023,
},
"total" : 14
}
}shellTa dokument vsebuje naslednje informacije:
- ime: Ime podjetja, ki je kupilo blago.
- enote: Skupno število izdelkov, ki jih je naročilo podjetje.
- lokacija: Lokacija podjetja. Če ima podjetje več podružnic, se te lahko shranijo v obliki matrike.
- transakcije: To polje vsebuje dodatni dokument. Takšni dokumenti se imenujejo »vgrajeni dokumenti« ali »vgrajeni dokumenti«. Vsak od transakcijskih dokumentov vsebuje informacije o tem, kako dolgo je podjetje že stranka (pod postavko »prvo«), kdaj je bilo oddano zadnje naročilo (pod postavko »zadnje«) in skupno število naročil izdelkov s strani podjetja (pod postavko »skupaj«).
V tem primeru smo dodali dodatne dokumente, da bi bilo lažje vključiti informacije pozneje. S tem zagotovimo dober pregled nad informacijami v bazi podatkov.
Ustvarjanje testne zbirke za poizvedbe MongoDB
Sedaj bomo ustvarili zbirko z imenom »Stranke«. Da bo pregled nad zbirko lažji, bomo vključili samo pet vnosov. Če za delo uporabljate poizvedbe MongoDB, lahko ustvarite obsežnejše zbirke z metodo insertMany.
Tako izgleda naša testna zbirka:
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,
}
}
] )shellKo izvedete ta vnos z uporabljenimi podatki (ali z lastnimi podatki), boste v zameno prejeli seznam ID-jev objektov. Ti so edinstveni in zagotavljajo, da je vsak dokument mogoče najti tudi prek ustreznega ID-ja. Če želite preveriti, ali so vsi dokumenti vključeni v zbirko, lahko uporabite MongoDB find brez parametrov:
db.customers.find ( )shellRezultat je seznam vseh ID-jev objektov s popolnimi dokumenti. Zdaj jih lahko iščete z uporabo poizvedb MongoDB.
Kako uporabljati poizvedbe MongoDB s polji in nizi
Z MongoDB poizvedbami lahko iščete posamezna polja, več polj, nize in vgrajene dokumente. V nadaljevanju bomo podrobneje obravnavali vsako od teh možnosti.
Poizvedovanje posameznih polj z MongoDB poizvedbami
Izpis iz MongoDB find kaže, kako koristna so lahko poizvedbe MongoDB. Naš majhen vzorec ustvari izpis z dolgimi nizi znakov, zato si lahko predstavljate, kako je, če delate z večjim vzorcem.
V naslednjem primeru bomo prav tako uporabili find, vendar bomo tokrat ustvarili posebno zahtevo, ki jo mora dokument izpolnjevati, da se lahko izpiše. Natančneje, iskali bomo vse dokumente, ki imajo ime „ATS“.
db.customers.find (
{ "name" : "ATS" }
)shellPreprosta poizvedba MongoDB, kot je ta, bo zdaj preiskala vse dokumente v zbirki in našla tiste, ki imajo ime z vrednostjo „ATS“. To velja samo za en vnos v naši zbirki, zato je izpis takšen:
db.customers.find ( { "name" : "ATS" } )
{
"_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
"name" : "ATS",
"units" : 17,
"location" : "France",
"transactions" : {
"first" : {
"year" : 2021,
},
"last" : {
"year" : 2022,
},
"total" : 2
}shellTudi obratno deluje. Če želite prikazati vse rezultate razen vnosa za »ATS«, vnesite naslednje:
db.customers.find (
{ "name" : { $ne : "ATS" } }
)shellČe želite izpisati poizvedbe MongoDB z različnimi vrednostmi, lahko to storite z uporabo matrike. To bomo storili z uporabo strank ATS in Jorgensen.
db.customers.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellPoizvedovanje več polj z MongoDB poizvedbami
Če potrebujete natančne rezultate, je pomembno, da poizvedbo naredite bolj specifično. Poizvedbe v MongoDB lahko naredite natančnejše z uporabo dodatnih parametrov. Spodaj bomo poleg imena podjetja „ATS“ določili tudi vrednost iz segmenta „enote“. Na ta način bo naša poizvedba iskala dokument, ki vsebuje obe vrednosti:
db.customers.find (
{ "name" : "ATS", "units" : 17 }
)shellImamo natančno ujemanje. Če se ujemata samo ena od dveh vrednosti, rezultat ne bo prikazan. Tukaj je primer poizvedbe brez rezultatov:
db.customers.find (
{ "name" : "ATS", "units" : 25 }
)shellČe želite pri uporabi poizvedb MongoDB upoštevati različne vrednosti, vendar želite, da poizvedba izpiše rezultat, tudi če je izpolnjena samo ena od zahtev, vnesite naslednje:
db.customers.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellPoizvedovanje vrednosti v nizih
V poizvedbah MongoDB lahko upoštevate tudi vrednosti v nizih. V naši zbirki so podjetja, ki imajo podružnice v več državah. Če želite izpisati vsa podjetja, ki imajo vsaj eno podružnico v Nemčiji, lahko vnesete naslednje:
db.customers.find (
{ "location" : "Germany" }
)shellIzpis zdaj vsebuje vse tri stranke, ki imajo vsaj eno podružnico v Nemčiji. Če želite razširiti svoj vnos in najti podjetja, ki imajo podružnice v Nemčiji in Avstriji, lahko uporabite isto poizvedbo in uporabite niz:
db.customers.find (
{ "location" : [ "Germany", "Austria" ] }
)shellOpazili boste, da vnos prikaže le en rezultat, čeprav teoretično iskalnim merilom ustrezata dve podjetji. Razlog za to je, da poizvedbe MongoDB natančno upoštevajo vnesene podatke, vključno z vrstnim redom elementov. Če želite, da metoda upošteva vrednosti ne glede na vrstni red, v katerem se pojavljajo, poizvedbo napišite na naslednji način:
db.customers.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shellPoizvedovanje vrednosti v vgrajenih dokumentih
V naši zbirki imamo tudi vgrajene dokumente, ki jih je mogoče izpisati tudi z uporabo poizvedb MongoDB. Za to morate dodati piko, da MongoDB signalizirate, da je treba analizirati polje v vgrajenem dokumentu. Če na primer želite seznam vseh strank, ki imajo več kot deset transakcij, vnesite naslednje:
db.customers.find (
{ "transactions.total" : { $gt : 10 } }
)shellMongoDB dostopa do dokumenta „transakcije“ in nato poišče število vseh transakcij pod „skupaj“.
Kako omejiti izhod poizvedb MongoDB
Izhodi poizvedb MongoDB so lahko precej obsežni, zato je smiselno, da izhod omejite na le nekaj polj. Za omejitev števila polj, prikazanih v izhodu, lahko uporabite projekcije. Te vsebujejo vrednost 1 (polja, ki morajo biti vključena v izhod) in 0 (polja, ki ne smejo biti vključena v izhod).
V naslednjem primeru bomo izvedli dvodelno poizvedbo. Najprej bomo začeli iskanje brez parametrov z metodo find. Samo po sebi bi to izpisalo vse podatke v zbirki. Vendar bomo takoj zatem izvedli projekcijo, ki upošteva samo polje ime.
db.customers.find (
{ }
{ "name" : 1 }
)shellPrikazani bodo vsi kupci, vendar bo izpis omejen na imena podjetij.
Kaj so kazalci in kako jih lahko uporabljam v poizvedbah MongoDB?
Kurzorji omogočajo prilagajanje prikaza rezultatov poizvedbe Mongo DB, ne da bi spremenili dejanske rezultate poizvedbe. Na primer, lahko omejite število prikazanih rezultatov ali spremenite njihov vrstni red. Če želite prikazati le dva rezultata, lahko uporabite metodo limit. Tako to storite:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 )shellZa razvrščanje izhodnih podatkov lahko uporabite naslednji vnos. Prikazali se bodo trije kupci, ki so naročili najmanj izdelkov:
db.customers.find (
{ }
{ "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )shellČe želite v svoji zbirki podatkov poiskati določen dokument, lahko uporabite metodo MongoDB findONE. To metodo podrobneje pojasnjujemo v drugem članku v našem digitalnem vodniku.
9378b1ddb0084eac26edf8b51e922ecb
b713997fc6bfc4f1f8d7a9ec6d65df69
c9ac60f2f370c12c4028af59a2fea6ae
7dd4860127d59f767354576150e2acbd
03b2f431bad31c7bebd9b9a784e591ba
641becce284983e6cc3064159285947f
26d82365945b0a5f7ffdff0728634590
790acfdc7a291dc8e88a484b74b322e9