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 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:
db.collection.findOne ( <query>, <projection>, <options> )shellAlle <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.
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ä:
# 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
}
]
)shellMitkä 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.
db.employee.findOne ( )shellTulostus on:
db.employee.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellHaku 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.
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )shellTulostus näyttää tältä:
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Cartwright",
gender : "Male",
age : 22,
year : 2022
}shellHaku 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:
db.employee.findOne ( { gender : "Male" } )shellTämän kriteerin mukaisia tuloksia on kaksi, mutta vain yksi niistä näytetään. Tuloksena näkyy työntekijä Mr. Brown:
db.employee.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellHaku 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:
db.employee.findOne ( { gender : "Male", age: 40 } )shellTuloksessa 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ä:
db.employee.findOne ( { gender : "Male", age: 40 } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellKuinka 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ä:
db.employee.findOne ( { age : { $gt : 30 } } )shellTämä sulkee pois herra Cartwrightin. Koska rouva Smith on yli 30-vuotias ja listan ensimmäinen henkilö, hän näkyy tuloksena:
db.employee.findOne ( { age : { $gt : 30 } } )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellKuinka 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.
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )shellSaat seuraavan tuloksen:
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Smith",
year : 2002
}shellMitä 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.
db.employee.findOne ( { name : "Larkham" } )shellTämän tulos on:
db.employee.findOne ( { name : "Larkham" } )
nullshellIlmainen GUI MongoDB Compass helpottaa tietokannan hallintaa. Lue graafisesta käyttöliittymästä lisää toisesta artikkelista digitaalisessa oppaassamme.