# Kaj je MongoDB findOne in kako ga uporabljati

Metoda MongoDB findOne je odlična za iskanje v zbirki. Vendar pa vrne le en rezultat, zato ni primerna za mnoge vrste iskanja.

## Kaj je MongoDB findOne?

[MongoDB](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-uvod-in-primerjava-z-mysql/) je sistem za upravljanje podatkovnih baz, ki lahko enostavno shranjuje in upravlja velike količine podatkov zahvaljujoč svojemu pristopu NoSQL in izjemni skalabilnosti. Čeprav ti vidiki uporabnikom ponujajo pomembne prednosti, to tudi pomeni, da sistem potrebuje močne metode, da lahko uporabniki učinkovito brskajo po podatkovni bazi.

Sistem shranjuje podatke vseh vrst v obliki dokumenta BSON (binarni JSON) in te dokumente združuje v zbirke. Če želite poiskati in izpisati enega od teh dokumentov, imate na voljo več možnosti. Poleg splošnejše metode iskanja MongoDB find je MongoDB findOne *zelo učinkovita metoda* za natančno filtriranje velikih zbirk podatkov.

MongoDB findOne išče vse dokumente in zbirke v skladu z določenimi merili, ki jih določi uporabnik. Posebnost te metode je, da **vedno vrne natanko en dokument**. Če je v iskalnem poizvedovanju samo en dokument, se ta dokument vrne. Če več dokumentov ustreza parametrom, ki jih določi uporabnik, MongoDB findOne vrne dokument, ki se pojavi prvi v naravnem vrstnem redu zbirke podatkov. Če v iskanju ni mogoče najti nobenega dokumenta, je izhod »null«.

## Kakšna je sintaksa za MongoDB findOne?

Osnovna sintaksa MongoDB findOne je preprosta. Metoda se uporablja na naslednji način:

```shell
db.collection.findOne ( <query>, <projection>, <options> )
```

Pod `<query>` lahko določite, kako naj metoda filtrira dokumente.

Pod `<projection>` lahko določite, katera polja naj se prikažejo za vrnjeni dokument. Uporabite logični vrednosti 1 (resnično/vključi) in 0 (neresnično/izključi), da označite, ali naj se polje vključi. Če ta parameter ostane prazen, se prikažejo vsa polja.

Tretji iskalni parameter `<options>` vam omogoča dodatno spreminjanje iskanja in tudi spreminjanje prikaza. Vsi trije iskalni parametri so neobvezni.

Note Za učinkovito iskanje zbirk z več iskalnimi parametri obstajajo [poizvedbe MongoDB](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-poizvedbe/). Poizvedbe temeljijo na metodi iskanja MongoDB. Več o poizvedbah MongoDB lahko izveste v našem digitalnem vodniku.

## Kako ustvariti zbirko za namene testiranja

Če ste namestili MongoDB na Linux, Windows ali Mac in želite uporabljati MongoDB findOne, je vredno nastaviti testno okolje, da lahko preizkusite metodo.

Če še niste nastavili baze podatkov, preberite naš izčrpen MongoDB tutorial, da se naučite, kako jo nastaviti. V našem primeru bomo uporabili bazo podatkov zaposlenih, ki vsebuje pet vnosov. Vsak vnos vsebuje informacije o imenu, spolu in starosti zaposlenih ter o tem, kako dolgo je oseba že zaposlena v podjetju. Zbirka izgleda takole:

```shell
# Create Collection
db.employee.insertMany ( [
    {
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
    },
    {
    name : "Jones",
    gender : "Female",
    age : 40,
    year : 2017,
    },
    {
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
    },
    {
    name : "Michaels",
    gender : "Female",
    age : 44,
    year : 2015
    },
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
    }
]
)
```

## Kakšni so različni načini iskanja z Mongo DB findOne?

Obstaja več načinov iskanja informacij z uporabo MongoDB findOne. Iskanje lahko izvedete brez parametrov, z ID-jem, z enim poljem ali z več polji.

### Iskanje brez parametrov

Če uporabljate metodo MongoDB findOne **brez parametrov**, bo sistem preiskal vašo bazo podatkov in upošteval vse vnose. V našem primeru to pomeni, da bo metoda identificirala pet vnosov. Ker noben dokument ni izključen in metoda vrne le en rezultat, bo MongoDB findOne izbrala prvo osebo, ki je bila vnesena v bazo podatkov.

```shell
db.employee.findOne ( )
```

Izhod je:

```shell
db.employee.findOne ( )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
```

### Iskanje po ID

Običajno želite za iskanje določiti nekakšna merila, da na koncu dobite dokument, ki ga dejansko potrebujete. Eden od načinov iskanja dokumentov z MongoDB findOne je iskanje po ID-ju.

Polje `_id` je **v vsakem dokumentu edinstveno**. V našem primeru vsaka ID predstavlja natanko enega zaposlenega. Če izvedete MongoDB findOne z uporabo ID objekta, boste dobili natanko tisti rezultat, ki ga iščete.

```shell
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
```

Izhod je videti takole:

```shell
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
    _id : ObjectID ( "582pfh773813tw982qj411l0"
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
}
```

### Iskanje po določenih poljih

Če ne poznate ID-ja ali želite v svoji zbirki iskati po drugih parametrih, lahko za **iskanje po določenih poljih** uporabite tudi MongoDB findOne. Če obstaja le en dokument, ki ustreza parametru, se bo prikazal ta dokument. Če pa vašim iskalnim kriterijem ustreza več dokumentov, bo sistem prikazal le prvi vnos.

V spodnjem primeru bomo iskali vse vnose, pri katerih je spol »Moški«. Tukaj je ukaz:

```shell
db.employee.findOne ( { gender : "Male" } )
```

Obstajata dva vnosa, ki ustrezata tem merilom, vendar bo prikazan le eden. Izpis prikazuje zaposlenega g. Browna:

```shell
db.employee.findOne ( { gender : "Male" } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
```

### Iskanje po več poljih

Imate tudi možnost, da dodatno omejite iskanje, da preprečite morebitna prekrivanja. To morda ni potrebno za naš majhen vzorec, vendar je ta možnost koristna, če delate z več sto ali celo tisoč vnosi. MongoDB findOne vam omogoča, da **za iskanje** uporabite **več polj**. Če želite identificirati zaposlenega po spolu (moški) in starosti, lahko napišete naslednje:

```shell
db.employee.findOne ( { gender : "Male", age: 40 } )
```

Rezultat ponovno prikazuje gospoda Browna, ki je edini moški v zbirki in star 40 let. Gospa Jones je enake starosti, vendar njen spol ne ustreza merilom, zato je rezultat takšen:

```shell
db.employee.findOne ( { gender : "Male", age: 40 } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
```

## Kako nastaviti pogoje za polje z uporabo MongoDB findOne

Prav tako je mogoče določiti pogoje za določeno polje in jih uporabiti kot iskalna merila. V naslednjem primeru iščemo samo zaposlene, starejše od 30 let.

Ta vnos izgleda takole:

```shell
db.employee.findOne ( { age : { $gt : 30 } } )
```

To izključuje gospoda Cartwrighta. Ker je gospa Smith starejša od 30 let in je prva oseba na seznamu, se prikaže kot rezultat:

```shell
db.employee.findOne ( { age : { $gt : 30 } } )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
```

## Kako izključiti polja z MongoDB findOne

Če imate obsežne zbirke, ki vsebujejo veliko informacij, lahko izhod vsebuje preveč informacij. Na srečo MongoDB findOne ponuja tudi možnost **izključitve polj iz izhoda**. V naslednjem primeru ne želimo v izhodu prikazati ID, spol in starost.

```shell
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
```

Prejeli boste naslednji izpis:

```shell
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
    name : "Smith",
    year : 2002
}
```

## Kaj se zgodi, če MongoDB findOne ne najde nobenih rezultatov za moje iskanje?

Če za vaše iskanje z MongoDB findOne ni rezultatov, se bo izpis še vedno prikazal. Da bi ponazorili, kaj se zgodi, bomo poiskali gospo Larkham, ki ni v zbirki.

```shell
db.employee.findOne ( { name : "Larkham" }  )
```

Rezultat za to je:

```shell
db.employee.findOne ( { name : "Larkham" }  )
null
```

Tip Brezplačni grafični uporabniški vmesnik [MongoDB Compass](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-compass/) olajša upravljanje vaše zbirke podatkov. Več o grafičnem uporabniškem vmesniku si preberite 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-findone/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/mongodb-findone/) for AI/LLM consumption.