# 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](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/mongodb-ievads-un-salidzinajums-ar-mysql/) 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, lai**bū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.

Tip Vai MongoDB apvalka izmantošana ir pārāk sarežģīta? [MongoDB Compass](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/mongodb-kompass/) 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.

1. 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ā.
2. Lai izmantotu meklēšanas funkciju, jums ir nepieciešamas **administratora tiesības**.
3. 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:

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

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

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

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

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

Rezultā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”.

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

Vienkā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:

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

To var darīt arī otrādi. Ja vēlaties parādīt visus rezultātus, izņemot ierakstu „ATS”, ievadiet šādu komandu:

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

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

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

### Vairā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:

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

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

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

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

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

### Vē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:

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

Rezultā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:

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

Jū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:

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

### Vē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:

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

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

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

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

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

Lai šķ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:

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

Tip Lai atrastu konkrētu dokumentu savā datu bāzē, varat izmantot [MongoDB findONE](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/mongodb-findone/) metodi. Šo metodi sīkāk izskaidrojam citā rakstā mūsu digitālajā ceļvedī.


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/mongodb-vaicajumi/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/mongodb-vaicajumi/) for AI/LLM consumption.