# 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](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-sissejuhatus-ja-vordlus-mysql-iga/) 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, et**oleks 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.

Tip Kas MongoDB-i shelli kasutamine on liiga keeruline? [MongoDB Compass](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-kompass/) 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.

1. 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.
2. Otsingufunktsiooni kasutamiseks on vaja **administraatori õigusi**.
3. 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:

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

Kä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:

```shell
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,
    }
}
] )
```

Kui 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:

```shell
db.customers.find ( )
```

Vä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”.

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

Sellised 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:

```shell
db.customers.find ( { "name" : "ATS" } )
{
    "_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2
    }
```

Ka vastupidine toimib. Kui soovite kuvada kõik tulemused peale „ATS” kirje, sisestage järgmine:

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

Kui soovite väljastada MongoDB päringuid erinevate väärtustega, saate seda teha massiivi abil. Teeme seda klientide ATS ja Jorgensen abil.

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

### Mitme 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:

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

Meil 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:

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

Kui 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:

```shell
db.customers.find (
    { $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)
```

### Massiivide 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:

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

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 ettevõtteid, millel on filiaalid Saksamaal ja Austrias, võite kasutada massiivi:

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

Te 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:

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

### Sisestatud 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:

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

MongoDB 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.

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

Kõ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:

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

Väljundi sorteerimiseks võite kasutada järgmist koodi. See kuvab kolm klienti, kes on tellinud kõige vähem tooteid:

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

Tip Konkreetse dokumendi leidmiseks oma andmebaasist võite kasutada [MongoDB](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-findone/) meetodit [findONE](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-findone/). Seda meetodit selgitame üksikasjalikumalt teises artiklis meie digitaalses juhendis.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-paeringud/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-paeringud/) for AI/LLM consumption.