# Mis on MongoDB findOne ja kuidas seda kasutada?

MongoDB meetod findOne on suurepärane kogumite otsimiseks. Siiski tagastab see ainult ühe tulemuse, mistõttu ei sobi see paljude otsingutüüpide jaoks.

## Mis on MongoDB findOne?

[MongoDB](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-sissejuhatus-ja-vordlus-mysql-iga/) on andmebaaside haldamise süsteem, mis suudab tänu NoSQL-lähenemisele ja märkimisväärsele skaleeritavusele hõlpsasti salvestada ja hallata suuri andmehulki. Kuigi need omadused pakuvad kasutajatele märkimisväärseid eeliseid, tähendab see ka seda, et süsteem vajab tugevaid meetodeid, et tagada kasutajate tõhus navigeerimine andmebaasis.

Süsteem salvestab kõik tüüpi andmed BSON-dokumendi (binaarne JSON) vormis ja koondab need dokumendid kogudesse. Kui soovite ühte neist dokumentidest otsida ja väljastada, on teil mitu võimalust. Lisaks üldisemale otsingumeetodile MongoDB find on MongoDB findOne *väga tõhus meetod* suurte andmebaaside täpseks filtreerimiseks.

MongoDB findOne otsib kõik dokumendid ja kogud vastavalt kasutaja määratud kriteeriumidele. Selle meetodi eripäraks on see, et see **tagastab alati täpselt ühe dokumendi**. Kui otsingupäringus on ainult üks dokument, tagastatakse see dokument. Kui mitu dokumenti vastab kasutaja määratud parameetritele, tagastab MongoDB findOne dokumendi, mis ilmub esimesena andmebaasi loomulikus järjekorras. Kui otsingust ei leita ühtegi dokumenti, on väljundiks „null”.

## Mis on MongoDB findOne’i süntaks?

MongoDB findOne põhiline süntaks on lihtne. Meetodit kasutatakse järgmiselt:

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

Alla `<query>` võite määrata, kuidas meetod dokumente filtreerima peaks.

Alla `<projection>` võite määrata, millised väljad peaksid tagastatavas dokumendis kuvatama. Kasutage booli väärtusi 1 (tõene/kaasa arvatud) ja 0 (vale/välja arvatud), et märkida, kas väli peaks olema kaasatud. Kui see parameeter jääb tühjaks, kuvatakse kõik väljad.

Kolmas otsinguparameeter `<options>` võimaldab otsingut veelgi täpsustada ja muuta ka kuvatavat teavet. Kõik kolm otsinguparameetrit on valikulised.

Note Mitme otsinguparameetriga kogude tõhusaks otsimiseks on olemas [MongoDB päringud](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-paeringud/). Päringud põhinevad MongoDB find- meetodil. Lisateavet MongoDB päringute kohta leiate meie digitaalsest juhendist.

## Kuidas luua kogumik testimise eesmärgil

Kui olete installinud MongoDB Linuxi, Windowsi või Maci ja soovite kasutada MongoDB findOne’i, tasub luua testkeskkond, et meetodit katsetada.

Kui te pole veel andmebaasi loonud, lugege meie põhjalikku MongoDB-õpetust, et õppida, kuidas seda teha. Allpool toodud näites kasutame viie kirje sisaldavat töötajate andmebaasi. Iga kirje sisaldab teavet töötaja nime, soo ja vanuse kohta ning selle kohta, kui kaua isik on ettevõttes töötanud. Kogumik näeb välja järgmine:

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

## Millised on erinevad viisid otsinguks Mongo DB findOne abil?

MongoDB findOne abil on teabe otsimiseks mitu võimalust. Otsida saab ilma parameetriteta, ID abil, ühe või mitme välja abil.

### Otsimine ilma parameetriteta

Kui kasutate MongoDB findOne meetodit **ilma parameetriteta**, otsib süsteem teie andmebaasist kõik kanded. Meie näites tähendab see, et meetod tuvastab viis kannet. Kuna ükski dokument ei ole välistatud ja meetod tagastab ainult ühe tulemuse, valib MongoDB findOne esimese isiku, kes andmebaasi sisestati.

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

Väljund on:

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

### Otsimine ID järgi

Tavaliselt soovite oma otsingule mingisugused kriteeriumid määrata, et leida just see dokument, mida tegelikult vajate. Üks viis MongoDB findOne abil dokumente otsida on ID järgi otsida.

Välja `_id` on **igas dokumendis unikaalne**. Meie näites esindab iga ID täpselt ühte töötajat. Kui kasutate MongoDB findOne’i objekti ID abil, saate täpselt soovitud tulemuse.

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

Väljund näeb välja järgmine:

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

### Otsimine konkreetsete väljade abil

Kui te ei tea ID-d või soovite oma kogust otsida muude parameetrite järgi, võite kasutada ka MongoDB findOne’i, et **otsida konkreetseid välju**. Kui parameetriga sobib ainult üks dokument, kuvatakse just see dokument. Kui aga teie otsingukriteeriumidele vastab mitu dokumenti, kuvab süsteem ainult esimese kirje.

Allpool toodud näites otsime kõik kirjed, mille sugu on „Mees”. Siin on käsk:

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

Selle kriteeriumiga vastab kaks kirjet, kuid kuvatakse ainult üks. Väljundis kuvatakse töötaja hr Brown:

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

### Otsimine mitme välja abil

Teil on ka võimalus oma otsingut veelgi kitsendada, et vältida kattumisi. Meie väikese valimi puhul ei pruugi see olla vajalik, kuid kui töötate mitme sajandi või isegi tuhandete kirjetega, on see võimalus väga kasulik. MongoDB findOne võimaldab **otsinguks** kasutada **mitut välja**. Kui soovite töötajat identifitseerida soo (mees) ja vanuse järgi, võite kirjutada järgmist:

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

Väljund näitab taas hr Browni, kes on kogus ainus meessoost isik ja 40-aastane. Pr Jones on sama vana, kuid tema sugu ei vasta kriteeriumidele, seega on tulemus järgmine:

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

## Kuidas määrata tingimused väljale, kasutades MongoDB findOne

Samuti on võimalik määratleda tingimused konkreetsele väljale ja kasutada neid otsingukriteeriumidena. Järgmises näites otsime ainult üle 30-aastaseid töötajaid.

See kanne näeb välja järgmine:

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

See välistab hr Cartwrighti. Kuna pr Smith on üle 30-aastane ja nimekirjas esimene, kuvatakse tulemusena tema:

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

## Kuidas välistada väljad MongoDB findOne abil

Kui teil on ulatuslikud kogud, mis sisaldavad palju teavet, võib väljund sisaldada liiga palju teavet. Õnneks pakub MongoDB findOne ka võimalust **väljundist väljajätta teatud väljad**. Järgmises näites ei soovi me väljundis kuvada ID-d, sugu ja vanust.

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

Saate järgmise väljundi:

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

## Mis juhtub, kui MongoDB findOne ei leia minu otsingule ühtegi tulemust?

Kui MongoDB findOne-iga otsingutulemusi ei leita, kuvatakse ikkagi väljund. Selle illustreerimiseks otsime Ms. Larkhamit, kes ei ole kogus olemas.

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

Selle väljund on:

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

Tip Tasuta GUI [MongoDB Compass](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/mongodb-kompass/) muudab andmebaasi haldamise lihtsamaks. Loe graafilise kasutajaliidese kohta lähemalt meie digitaalse juhendi teises artiklis.


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