# 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](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-uvod-in-primerjava-z-mysql/) 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 pomembno**imeti 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.

Tip Je uporaba lupine za MongoDB preveč zapletena? [MongoDB Compass](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/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.

1. 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.
2. Za uporabo funkcije iskanja potrebujete **administratorske pravice**.
3. 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:

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

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

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

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

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

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

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

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

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

Tudi obratno deluje. Če želite prikazati vse rezultate razen vnosa za »ATS«, vnesite naslednje:

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

Če želite izpisati poizvedbe MongoDB z različnimi vrednostmi, lahko to storite z uporabo matrike. To bomo storili z uporabo strank ATS in Jorgensen.

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

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

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

Imamo natančno ujemanje. Če se ujemata samo ena od dveh vrednosti, rezultat ne bo prikazan. Tukaj je primer poizvedbe brez rezultatov:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Za razvrščanje izhodnih podatkov lahko uporabite naslednji vnos. Prikazali se bodo trije kupci, ki so naročili najmanj izdelkov:

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

Tip Če želite v svoji zbirki podatkov poiskati določen dokument, lahko uporabite metodo [MongoDB findONE](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-findone/). To metodo podrobneje pojasnjujemo v drugem članku v našem digitalnem vodniku.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-poizvedbe/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-poizvedbe/) for AI/LLM consumption.