# 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](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/mongodb-ivadas-ir-palyginimas-su-mysql/) 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ų, svarbu**turė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ą.

Tip Ar MongoDB apvalkalo naudojimas yra pernelyg sudėtingas? [MongoDB Compass](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/mongodb-kompasas/) 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.

1. 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.
2. Norėdami naudotis paieškos funkcija, turite turėti **administratoriaus teises**.
3. 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:

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

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

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

Kai 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ų:

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

Rezultatas 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“.

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

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

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

Atvirkštinis būdas taip pat veikia. Jei norite rodyti visus rezultatus, išskyrus įrašą „ATS“, įveskite šią komandą:

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

Jei norite išvesti MongoDB užklausas su skirtingomis reikšmėmis, galite tai padaryti naudodami masyvą. Tai padarysime naudodami klientus ATS ir Jorgensen.

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

### Kelių 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:

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

Turime tikslią atitiktį. Jei tik viena iš dviejų verčių yra atitinkama, rezultatas nebus rodomas. Štai pavyzdys užklausos be rezultatų:

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

Jei 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ą:

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

### Verč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ą:

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

Dabar 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ą:

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

Pastebė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:

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

### Vertė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ą:

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

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

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

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

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

Norėdami surūšiuoti rezultatus, galite naudoti šį įrašą. Tai parodys tris klientus, kurie užsisakė mažiausiai produktų:

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

Tip Norėdami rasti konkretų dokumentą savo duomenų bazėje, galite naudoti [MongoDB findONE](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/mongodb-findone/) metodą. Šį metodą išsamiau paaiškiname kitame mūsų skaitmeninio vadovo straipsnyje.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/mongodb-uzklausos/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/mongodb-uzklausos/) for AI/LLM consumption.