MongoDB päringud või­mal­da­vad teil oma and­me­ba­asi kiiresti ja tõhusalt otsida ja ana­lüü­sida. Meetodi struktuur on loogiline ja sellega saab kasutada mitmeid pa­ra­meetreid.

Kuidas otsida kogusid tõhusalt

Do­ku­men­ti­del põhineva NoSQL-la­hen­dus­ena annab MongoDB ka­su­ta­ja­tele võimaluse hõlpsasti sal­ves­tada ja hallata suuri ja mit­me­ke­si­seid and­me­hulki. And­me­ba­asi hal­dus­süs­teem on väga paindlik ja seda saab hõlpsasti ho­ri­son­taal­selt ska­lee­rida.

Erinevalt re­lat­sioo­ni­lis­test and­me­baasi­dest sal­ves­ta­takse Mongo DB andmed BSON-do­ku­men­ti­desse (binaarne JSON) ja koon­da­takse kogudesse. Selle lä­he­ne­mise tõhusaks toi­mi­miseks on oluline, etoleks olemas tugevad pä­rin­gu­meh­ha­nis­mid, mis suudavad and­me­ba­asi läbi sõeluda ja esitada ka­su­ta­ja­tele vajalikku teavet. MongoDB päringute abil saab andmebaas otsida isegi keeruka struk­tuuriga kogudest, et leida teile vajalik teave.

Tip

Kas MongoDB-i shelli ka­su­ta­mine on liiga keeruline? MongoDB Compass on tasuta graa­fi­line ka­su­ta­ja­lii­des, mis muudab MongoDB-is na­vi­gee­ri­mise lihtsaks.

Mis on MongoDB päringud?

MongoDB päringud on ka­su­ta­ja­sõb­ra­li­kud töö­riis­tad, mida ka­su­ta­takse kee­ru­liste and­me­st­ruk­tuu­ride ot­si­miseks. Need järgivad loogilisi reegleid ja toimivad sarnaselt enamiku vee­bi­sai­tide filt­ree­ri­mis­või­ma­lus­tega. See võimaldab teil oma otsingut või­ma­li­kult täpselt for­mu­lee­rida, et saavutada parimaid tulemusi. See on eriti oluline, kuna MongoDB suudab sal­ves­tada palju erinevat tüüpi andmeid. Ilma vajalike filt­ree­ri­mis­või­ma­lus­teta oleks and­me­ba­asi haldamine keeruline. Järg­mis­tes jaotistes selgitame, mida on vaja MongoDB päringute loomiseks ja kuidas neid kasutada.

Millised on MongoDB päringute nõuded?

MongoDB päringute ka­su­ta­miseks on vaid mõned nõuded.

  1. Teie arvutisse peab olema ins­tal­li­tud MongoDB. Andmebaas töötab paljudes ope­rat­sioo­ni­süs­teemi­des, seega allpool esitatud juhised kehtivad nii Linuxi, OS X kui ka Windowsi ka­su­ta­jate jaoks. Pärast ins­tal­li­mist järgnevad sammud on kõikides süs­teemi­des ühe­su­gu­sed ja mõjutavad ainult and­me­ba­asi ennast. Ins­tal­li­mise kohta leiate teavet meie MongoDB-õpetusest.
  2. Ot­sin­gu­funkt­siooni ka­su­ta­miseks on vaja ad­mi­nist­raa­tori õigusi.
  3. Parim on luua test­kesk­kond, et saaksite Mongo DB päringuid ris­ki­va­balt proovida.

Kuidas struk­tu­ree­rida testikogu

Esmalt avage shell ja logige sisse ad­mi­nist­raa­to­rina. Seejärel looge uus kogum, mis toimib teie esimeste MongoDB päringute test­kesk­kon­nana. Lisaks lihtsate do­ku­men­tide ot­si­misele võimaldab meetod otsida ka massiive, erinevaid välju ja sis­se­ehi­ta­tud dokumente, mistõttu oleme ot­sus­ta­nud luua veidi kee­ru­li­sema kogumi. Nii saate parema ülevaate MongoDB päringute ulatusest.

Meie näide koosneb klientide ni­me­kir­jast. Nimekirja formaat on järgmine:

{
    "name" : "Schulz",
    "units" : 642,
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
}
shell

Käesolev dokument sisaldab järgmist teavet:

  • nimi: Kauba ostnud ettevõtte nimi.
  • ühikud: Ettevõtte tellitud toodete koguarv.
  • asukoht: ettevõtte asukoht. Kui et­te­võt­tel on mitu filiaali, võib need sal­ves­tada massiivi kujul.
  • tehingud: See väli sisaldab li­sa­do­ku­menti. Selliseid dokumente ni­me­ta­takse „si­ses­ta­tud do­ku­men­ti­deks” või „pe­sas­ta­tud do­ku­men­ti­deks”. Iga te­hin­gu­do­ku­ment 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äien­da­vaid dokumente, et hiljem oleks lihtsam lisada teavet. See aitab tagada hea ülevaate and­me­baasis olevast teabest.

MongoDB päringute test­ko­gu­miku loomine

Nüüd loome kogumiku nimega „Kliendid”. Et ko­gu­mi­kust oleks lihtne ülevaadet saada, lisame sinna ainult viis kirjet. Kui kasutate töös MongoDB päringuid, saate insertMany meetodit kasutades luua ula­tus­li­ku­maid 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,
    }
}
] )
shell

Kui käivitad selle kande meie kasutatud andmetega (või oma andmetega), saad vastuseks objektide ID-de loendi. Need on uni­kaal­sed ja tagavad, et iga dokumenti on võimalik leida ka vastava ID kaudu. Kui soovid veenduda, et kõik do­ku­men­did on kogumisse lisatud, võid kasutada MongoDB find ilma pa­ra­meet­ri­teta:

db.customers.find ( )
shell

Väl­jun­diks on loetelu kõikidest objektide ID-dest koos täielike do­ku­men­ti­dega. Nüüd saate neid otsida MongoDB päringute abil.

Kuidas kasutada MongoDB päringuid väljade ja mas­sii­vi­dega

MongoDB päringuid saab kasutada üksikute väljade, mitme välja, mas­sii­vide ja sis­se­ehi­ta­tud do­ku­men­tide ot­si­miseks. Allpool vaatame neid ükshaaval lähemalt.

MongoDB pä­rin­gu­tega ü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äl­jun­diks pikki mär­gi­ja­da­sid, seega võite ette kujutada, milline on olukord suurema valimiga töötades.

Järgmises näites kasutame samuti find, kuid seekord loome spet­siaalse nõude, millele dokument peab vastama, et see väl­jas­ta­taks. Täpsemalt otsime kõiki dokumente, mille nimi on „ATS”.

db.customers.find (
    { "name" : "ATS" }
)
shell

Sellised lihtsad MongoDB päringud otsivad nüüd kõik kogumiku do­ku­men­did 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
    }
shell

Ka vas­tu­pi­dine toimib. Kui soovite kuvada kõik tulemused peale „ATS” kirje, sisestage järgmine:

db.customers.find (
    { "name" : { $ne : "ATS" } }
)
shell

Kui soovite väl­jas­tada MongoDB päringuid erinevate väär­tus­tega, saate seda teha massiivi abil. Teeme seda klientide ATS ja Jorgensen abil.

db.customers.find (
    { "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)
shell

Mitme välja päringud MongoDB pä­rin­gu­tega

Kui vajate täpseid tulemusi, on oluline muuta päring täpsemaks. MongoDB päringuid saab täpsemaks muuta, kasutades li­sapa­ra­metreid. Allpool määrame lisaks ettevõtte nimele „ATS” ka väärtuse seg­men­tist „units”. Sel viisil otsib meie päring dokumenti, mis sisaldab mõlemat väärtust:

db.customers.find (
    { "name" : "ATS", "units" : 17 }
)
shell

Meil on täpne vaste. Kui ainult üks kahest väär­tu­sest on vaste, ei kuvata tulemust. Siin on näide päringust, millel ei ole tulemusi:

db.customers.find (
    { "name" : "ATS", "units" : 25 }
)
shell

Kui soovite MongoDB päringute ka­su­ta­misel 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 } ] }
)
shell

Mas­sii­vide väärtuste päringud

MongoDB pä­rin­gu­tes saab arvesse võtta ka mas­sii­vi­des olevaid väärtusi. Meie kogus on et­te­võt­teid, millel on filiaalid mitmes riigis. Kui soovite kuvada kõik et­te­võt­ted, millel on vähemalt üks filiaal Saksamaal, võite sisestada järgmise päringu:

db.customers.find (
    { "location" : "Germany" }
)
shell

Vä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 et­te­võt­teid, millel on filiaalid Saksamaal ja Austrias, võite kasutada massiivi:

db.customers.find (
    { "location" : [ "Germany", "Austria" ] }
)
shell

Te märkate, et sisend näitab ainult ühte tulemust, kuigi teo­ree­ti­li­selt vastavad ot­sin­gukri­tee­riumi­dele kaks ettevõtet. Selle põhjuseks on asjaolu, et MongoDB päringud järgivad täpselt antud sisendit, seal­hul­gas ele­men­tide jär­je­korda. Kui soovite, et meetod arvestaks väärtusi sõltumata nende jär­je­kor­rast, kirjutage päring järg­mi­selt:

db.customers.find (
    { "location" : { $all : [ "Germany", "Austria" ] } }
)
shell

Si­ses­ta­tud do­ku­men­tide väärtuste päringud

Meie kogus on ka sis­se­ehi­ta­tud do­ku­men­did, mida saab samuti MongoDB päringute abil väl­jas­tada. Selleks tuleb lisada punkt, et märkida MongoDB-le, et pe­sas­ta­tud dokumendi väli tuleb ana­lüü­sida. Näiteks, kui soovite nimekirja kõikidest klien­ti­dest, kellel on rohkem kui kümme tehingut, sisestage järgmine:

db.customers.find (
    { "transactions.total" : { $gt : 10 } }
)
shell

MongoDB avab dokumendi „tran­sac­tions” 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 ku­va­ta­vate väljade arvu saab piirata pro­jekt­sioo­nide abil. Need si­sal­da­vad 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 ka­he­osa­lise päringu. Esmalt algatame pa­ra­meet­ri­teta otsingu, kasutades meetodit find. See väl­jas­taks ise­ene­sest kogu kogumiku andmed. Siiski järgneb sellele kohe pro­jekt­sioon, mis võtab arvesse ainult nimevälja.

db.customers.find (
    { }
    { "name" : 1 }
)
shell

Kõik kliendid kuvatakse, kuid väljund piirdub et­te­võ­tete nimedega.

Mis on kursorid ja kuidas neid MongoDB pä­rin­gu­tes kasutada?

Kursorid või­mal­da­vad kohandada Mongo DB päringu tulemuste kuvamist, muutmata päringu tegelikke tulemusi. Näiteks saate piirata ku­va­ta­vate tulemuste arvu või muuta nende jär­je­korda. Kui soovite kuvada ainult kahte tulemust, saate kasutada piiran­gu­mee­to­dit. Siin on juhised:

db.customers.find (
    { }
    { "name" : 1 }
).limit ( 2 )
shell

Väljundi sor­tee­ri­miseks 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 } )
shell
Tip

Konk­reetse dokumendi leid­miseks oma and­me­baasist võite kasutada MongoDB meetodit findONE. Seda meetodit selgitame ük­sik­as­ja­li­ku­malt teises artiklis meie di­gi­taal­ses juhendis.

9378b1ddb0084eac26edf8b51e922ecb

b713997fc6bfc4f1f8d7a9ec6d65df69

c9ac60f2f370c12c4028af59a2fea6ae

7dd4860127d59f767354576150e2acbd

03b2f431bad31c7bebd9b9a784e591ba

641becce284983e6cc3064159285947f

Go to Main Menu