# Mikä on MongoDB findOne ja miten sitä käytetään?

MongoDB:n findOne-metodi on erinomainen kokoelman hakua varten. Se palauttaa kuitenkin vain yhden tuloksen, minkä vuoksi se ei sovellu monenlaisiin hauksiin.

## Mikä on MongoDB findOne?

[MongoDB](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/mongodb-esittely-ja-vertailu-mysqlaeaen/) on tietokannan hallintajärjestelmä, joka pystyy helposti tallentamaan ja hallinnoimaan suuria tietomääriä NoSQL-lähestymistavan ja huomattavan skaalautuvuuden ansiosta. Nämä ominaisuudet tarjoavat käyttäjille merkittäviä etuja, mutta ne myös tarkoittavat, että järjestelmä tarvitsee tehokkaita menetelmiä varmistaakseen, että käyttäjät voivat navigoida tietokannassa tehokkaasti.

Järjestelmä tallentaa kaiken tyyppiset tiedot BSON-dokumentin (binary JSON) muodossa ja niputtaa nämä dokumentit kokoelmiin. Jos haluat etsiä ja tulostaa yhden näistä dokumenteista, sinulla on käytettävissäsi useita vaihtoehtoja. Yleisemmän hakumenetelmän MongoDB find lisäksi MongoDB findOne on *erittäin tehokas menetelmä* suurten tietokantojen tarkkaan suodattamiseen.

MongoDB findOne etsii kaikki asiakirjat ja kokoelmat käyttäjän määrittelemien kriteerien perusteella. Tämän menetelmän erityispiirre on, että se **palauttaa aina täsmälleen yhden dokumentin**. Jos hakukyselyssä on vain yksi dokumentti, tämä dokumentti palautetaan. Jos useat dokumentit vastaavat käyttäjän määrittämiä parametreja, MongoDB findOne palauttaa dokumentin, joka esiintyy ensimmäisenä tietokannan luonnollisessa järjestyksessä. Jos hakua varten ei löydy dokumentteja, tulos on ”null”.

## Mikä on MongoDB findOne -komennon syntaksi?

MongoDB findOne -komennon perusrakenteet ovat yksinkertaiset. Menetelmää käytetään seuraavasti:

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

Alle `<query>` voivat määrittää, miten menetelmä suodattaa asiakirjat.

Alle `<projection>` voit määrittää, mitkä kentät palautettavassa asiakirjassa näytetään. Käytä boolen arvoja 1 (tosi/sisällytä) ja 0 (epätosi/sulje pois) osoittamaan, pitäisikö kenttä sisällyttää. Jos tämä parametri jää tyhjäksi, kaikki kentät näytetään.

Kolmas hakuparametri `<options>` mahdollistaa haun tarkentamisen ja näytön muuttamisen. Kaikki kolme hakuparametria ovat valinnaisia.

Huomio [MongoDB-kyselyt](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/mongodb-queries/) mahdollistavat tehokkaan haun kokoelmista useilla hakuparametreillä. Kyselyt perustuvat MongoDB:n find- menetelmään. Lisätietoja MongoDB-kyselyistä löytyy digitaalisesta oppaastamme.

## Kuinka luoda kokoelma testausta varten

Jos olet asentanut MongoDB:n Linux-, Windows- tai Mac-käyttöjärjestelmään ja haluat käyttää MongoDB findOne -toimintoa, kannattaa luoda testausympäristö, jossa voit kokeilla menetelmää.

Jos et ole vielä määrittänyt tietokantaa, lue kattava MongoDB-oppaamme, jossa kerrotaan, miten tietokanta määritetään. Alla olevassa esimerkissä käytämme viisi merkintää sisältävää työntekijätietokantaa. Jokainen merkintä sisältää tietoja työntekijän nimestä, sukupuolesta ja iästä sekä siitä, kuinka kauan henkilö on ollut yrityksen palveluksessa. Kokoelma näyttää tältä:

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

## Mitkä ovat eri tapoja hakea Mongo DB findOne -toiminnolla?

MongoDB findOne -toiminnolla voi etsiä tietoa useilla eri tavoilla. Voit tehdä haun ilman parametreja, ID:n avulla, yhden kentän avulla tai useiden kenttien avulla.

### Haku ilman parametreja

Jos käytät MongoDB:n findOne-menetelmää **ilman parametreja**, järjestelmä etsii tietokannastasi kaikki merkinnät. Esimerkissämme tämä tarkoittaa, että menetelmä tunnistaa viisi merkintää. Koska yhtään dokumenttia ei ole suljettu pois ja menetelmä palauttaa vain yhden tuloksen, MongoDB findOne valitsee ensimmäisen henkilön, joka on syötetty tietokantaan.

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

Tulostus on:

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

### Haku tunnuksen perusteella

Normaalisti haluat antaa jonkinlaiset hakukriteerit, jotta löydät juuri sen asiakirjan, jota tarvitset. Yksi tapa etsiä asiakirjoja MongoDB findOne -toiminnolla on etsiä ID:tä.

Kenttä `_id` on **ainutlaatuinen jokaisessa asiakirjassa**. Esimerkissämme jokainen tunnus edustaa tarkalleen yhtä työntekijää. Jos suoritat MongoDB findOne -komennon käyttämällä objektitunnusta, saat tarkalleen haluamasi tuloksen.

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

Tulostus näyttää tältä:

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

### Haku tiettyjen kenttien avulla

Jos et tiedä tunnusta tai haluat etsiä kokoelmastasi muita parametreja, voit myös käyttää MongoDB findOne -toimintoa **tiettyjen kenttien etsimiseen**. Jos parametria vastaava asiakirja on vain yksi, se näytetään. Jos hakuehtoja vastaavia asiakirjoja on useita, järjestelmä näyttää vain ensimmäisen tuloksen.

Alla olevassa esimerkissä haetaan kaikki merkinnät, joiden sukupuoli on ”Mies”. Komento on seuraava:

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

Tämän kriteerin mukaisia tuloksia on kaksi, mutta vain yksi niistä näytetään. Tuloksena näkyy työntekijä Mr. Brown:

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

### Haku useilla kentillä

Voit myös rajata hakua edelleen, jotta vältät päällekkäisyydet. Tämä ei ehkä ole tarpeen pienessä otoksessamme, mutta jos käsittelet useita satoja tai jopa tuhansia tietueita, tämä vaihtoehto on kätevä. MongoDB findOne -toiminnolla voit käyttää **useita kenttiä hakuun**. Jos haluat tunnistaa työntekijän sukupuolen (mies) ja iän perusteella, voit kirjoittaa seuraavasti:

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

Tuloksessa näkyy jälleen kerran herra Brown, joka on kokoelmassa ainoa mies ja 40-vuotias. Neiti Jones on samanikäinen, mutta hänen sukupuolensa ei vastaa kriteerejä, joten tulos näyttää tältä:

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

## Kuinka asettaa ehtoja kentälle käyttämällä MongoDB findOne -komentoa

On myös mahdollista määritellä ehtoja tietylle kentälle ja käyttää niitä hakukriteereinä. Seuraavassa esimerkissä haetaan vain yli 30-vuotiaita työntekijöitä.

Tämä merkintä näyttää tältä:

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

Tämä sulkee pois herra Cartwrightin. Koska rouva Smith on yli 30-vuotias ja listan ensimmäinen henkilö, hän näkyy tuloksena:

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

## Kuinka sulkea kentät pois MongoDB findOne -toiminnolla

Jos sinulla on laajoja kokoelmia, jotka sisältävät paljon tietoa, tuloste voi sisältää liikaa tietoa. Onneksi MongoDB findOne tarjoaa myös mahdollisuuden **sulkea kenttiä pois tulosteesta**. Seuraavassa esimerkissä emme halua näyttää ID:tä, sukupuolta ja ikää tulosteessa.

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

Saat seuraavan tuloksen:

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

## Mitä tapahtuu, jos MongoDB findOne ei löydä hakuni tuloksia?

Jos MongoDB findOne -hakusi ei tuota tuloksia, tulos näytetään silti. Havainnollistaaksemme mitä tapahtuu, haemme Ms. Larkhamia, joka ei ole kokoelmassa.

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

Tämän tulos on:

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

Vinkki Ilmainen GUI [MongoDB Compass](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/mongodb-compass/) helpottaa tietokannan hallintaa. Lue graafisesta käyttöliittymästä lisää toisesta artikkelista digitaalisessa oppaassamme.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/mongodb-findone/](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/mongodb-findone/) for AI/LLM consumption.